IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Dispositif d'aide aux travailleurs isolés. Problème de conception ?


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 17
    Par défaut Dispositif d'aide aux travailleurs isolés. Problème de conception ?
    Bonjour,

    Je suis actuellement en train de développer une application Android permettant d'assister les travailleurs isolés (en usine par exemple). Lorsque le téléphone est trop incliné (travailleur allongé, tombé, etc) pendant un certain délais, le téléphone passe en mode "Pré-alerte". Il est alors possible pendant un certains délais de désactiver le mode pré-alerte afin d'informer le téléphone que tout va bien. Au delà de ce délais, si le mode pré-alerte n'est pas désactivé le téléphone passe en mode alerte. Le téléphone est alors localisé, un sms avec la localisation du travailleur est envoyé et ce dernier déclenche une alarme sonore permettant de localiser plus facilement l'utilisateur.

    Dans un premier temps, tout mon code se trouvait dans une activity (Main). Ce qui fait que l'application ne fonctionnait que lorsque celle-ci est affichée à l'utilisateur. Toutefois, il peut arriver que l'utilisateur ferme cette application (du moins l'IHM). Pour résoudre ce problème, j'ai décidé d'utiliser un service qui tourne en tâche de fond. Ce dernier est alors capable de détecter une trop forte inclinaison même si l'IHM n'est pas affichée. Cela fonctionne plutôt pas mal.

    En revanche, lorsque l'IHM est fermée et que le téléphone passe en mode pré-alerte, j'aimerais que le service ré-ouvre l'IHM afin de lui proposer de désactiver le mode pré-alerte.

    J'ai donc utilisé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Intent intent = new Intent(DATI.getInstance().context, Main.class);
    DATI.getInstance().context.startActivity(intent);
    Celà ouvre bien l'IHM, mais ouvre une nouvelle instance de mon IHM (je me retrouve donc avec deux instances "Main" de mon IHM affichée)...Je voudrais que ce soit la même instance qui soit affichée. J'ai donc fouillé sur internet et je suis tombé sur un attribut à rajouter dans mon manifest :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    android:launchMode="singleInstance"
    Ca fonctionne a peu près bien, sauf dans le cas suivant :

    1. J'ouvre l'IHM => le service est exécuté
    2. Je ferme l'IHM (bouton HOME ou BACK)
    3. Je penche mon téléphone => le mode pré-alerte est déclenché et mon IHM se réouvre (telle qu'elle était avant)
    4. Je ferme l'IHM (bouton HOME ou BACK)

    PAFFFF le téléphone se met à buger...la surcouche HTC se mets à rebooter, le téléphone passe en mode paysage, des applis fermées il y a deux jours se ré-ouvrent, etc...



    Quelqu'un aurait une solution à mon problème ? Soit pour régler ce bug, soit pour concevoir l'application d'une autre manière ? S'il vous faut d'autres morceaux de codes que vous jugez utile, n'hésitez pas à me demander !

    Merci d'avance

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    http://developer.android.com/guide/t...ent.html#lmode

    utilises plutôt singleTop ^^.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    android:launchMode="singleTop"
    Pour appeler l'intent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Intent intent= new Intent(DATI.getInstance().context, Main.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    DATI.getInstance().context.startActivity(intent);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 17
    Par défaut
    Feanorin...tu es mon sauveur !

    Je te remercie pour le lien ! Cependant je l'avais bel et bien lu (comme j'ai pu, j'ai un peu de mal avec l'anglais).

    Entre temps, j'avais passé mon intent dans mon manifest en singleTop (grâce au même lien que tu m'as communiqué) cependant ça ne fonctionnait toujours pas car j'avais omis d'ajouter les flag à mon intent. Je pensais qu'il suffisait de le spécifier soit dans le manifest, soit via un flag.

    Je te remercie encore mille fois !

    Tu me confirmes donc qu'il faut à la fois spécifier le singleTop dans le manifest et par flag ? Peux-tu me donner des détails sur cette utilisation ?

    Bien cordialement,
    Fieldset

  4. #4
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Tu me confirmes donc qu'il faut à la fois spécifier le singleTop dans le manifest et par flag ? Peux-tu me donner des détails sur cette utilisation ?
    Oui, il me semble que c'est ce que tu demandes .

    euh après le flag sur le Intent.FLAG_ACTIVITY_NEW_TASK n'est peut être pas forcément nécessaire

    Après pour revenir sur le singleInstance ou le singleTask si tu veux les utiliser essaye de ne le faire que sur une de tes Activity qui est un point d'entrée de ton application ( en gros qui sera la première activité dans ta pile comme cela tu n'auras pas de souci avec l'action Back).
    Sinon tu auras comme tu as pu constater pas mal de souci avec l'action Back sur tes activité .


    par contre pour le singleTop:
    If an instance of the activity already exists at the top of the target task, the system routes the intent to that instance through a call to its onNewIntent() method, rather than creating a new instance of the activity.
    Ceci ne marchera que si ton activité est dans la pile "haute" soit une des dernière lancés.

    Après pour garder ton activity
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    android:alwaysRetainTaskState=true
    Ca permet qu'Android ne la supprime pas de la pile au bout de 30 minutes de non utilisation.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 17
    Par défaut
    Super ! Merci beaucoup pour ces explications claires et précises !

    Il faut effectivement que j'effectue quelques tests de manière à bien comprendre les différents modes de fonctionnement entre singleInstance, singleTop, etc.

    Je te remercie également pour l'astuce permettant de conserver l'application dans la "pile haute", ça va bien m'aider je pense

    Dernière petite question : en fait je me posais la question de savoir quelle était la subtilité / différence entre le singleTop qui est précisé dans le manifest et celui qui est précisé via le flag ?

    Bien cordialement,
    Fieldset

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Associations d'aide aux log. libres/linux en France
    Par narmataru dans le forum Linux
    Réponses: 17
    Dernier message: 18/11/2014, 23h00
  2. Réponses: 2
    Dernier message: 24/01/2012, 13h48
  3. Aide aux consommateurs/aux hébergeurs peu scrupuleux
    Par icetechnik dans le forum Juridique
    Réponses: 2
    Dernier message: 24/11/2005, 21h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo