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 :

Les changements d'états dans une application différée.


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant en alternance (Développement)
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Etudiant en alternance (Développement)

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut Les changements d'états dans une application différée.
    Bonjour à vous,
    Voilà je commence un peu le développement Android (java) et là se pose à moi un problème. Mais avant de vous exposer mon problème je vais vous expliquer le contexte:
    Je cherche à mettre en place un écran de connexion dans lequel on rentre un identifiant et un mot de passe (c'est fou hein? Révolutionnaire même!) de là, je crée un URL avec en paramètre l'identifiant et le mot de passe. Jusque là pas de soucis j'ai su faire, l'interface c'est fait, la récupération de données aussi, l'URL aussi, mais alors où est le problème se diront peut-être certains?
    Et bien voilà, lorsque l'utilisateur rentre un mot de passe (ou un identifiant) invalide, je bascule sur le navigateur du téléphone avec mon URL. Là s'ouvre alors une fenêtre disant que l'URL est invalide avec pour seule possibilité de cliquer sur "OK". Je souhaiterai alors que lorsque le navigateur du téléphone affiche cet onglet je rebascule automatiquement sur mon application (l'écran de connexion quoi).

    J'ai fait des recherches là-dessus (je suis vraiment débutant dans la programmation sur téléphone ne me frappez pas!! ) et j'ai ouïs dire que les applications avaient des "états" (onPause(), onStop(), onStart(), ... ) tout ça pour dire que j'ai réfléchis en fonction de ça et je me suis imaginé quelque chose comme ça:

    *code pour lancer l'URL*
    Si l'application n'est plus au premier plan:
    Si le navigateur est dans l'état onPause():
    Retour sur l'application
    Fin si
    Fin si

    Voilà, mais je ne sais pas comment le faire...
    Alors je me doute que pour le début c'est quelque chose comme:
    if(!isInFront){...}
    Mais pour ce qui est de vérifier qu'une autre application soit dans un état je n'ai absolument aucune idée de comment faire.
    Si quelqu'un peut m'expliquer (en partant du principe que je suis un véritable bonobo dans le monde du développement sur Android! ) je vous en serai grès!


    Merci pour l'aide que vous m'apporterez, je continue mes recherches en attendant et meilleurs vœux à vous!

  2. #2
    Membre expérimenté Avatar de Altak
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 170
    Par défaut
    Bonjour,

    Il faut que tu lance ton intent avec la fonction startActivityForResult()
    Si tuas ta page avec le OK, il te faudra faire en sorte que l'onglet se ferme.
    Une fois fermé,ton application sera automatiquement rappelé.

    Voici un tuto sur comment utiliser startActivityForResult :
    http://www.mybringback.com/android-s...roid-tutorial/

    GLHF

    PS: meilleur vœux a toi aussi!!

  3. #3
    Membre à l'essai
    Homme Profil pro
    Etudiant en alternance (Développement)
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Etudiant en alternance (Développement)

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut
    Bonjour et merci à toi Altak pour ta réponse, à vrais dire je ne savais même pas que la fonction startActivityForResult() (bon ok j'avais surtout pas fait attention du coup parce que moi je fais un startActivity normal! ><) j'ai regardé le tutoriel du coup ainsi que d'autres mais j'ai le sentiment (et j'espère me tromper!) que cela fonctionne que si on maitrise les activity... Or moi je ne maitrise rien sur le navigateur, je lance bêtement un URL, pour que ce soit plus claire voilà le code grosso modo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    bouton1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    // Si on a cliqué sur le bouton "ok" alors on reccupére les valeurs contenues dans les zone en entrée.
                    EditText User = (EditText)findViewById(R.id.editText);
                    EditText Password = (EditText)findViewById(R.id.editText2);
                    // On converti la chaine de caractère en string avant de convertir les minuscules en majuscules.
                    String userName = User.getText().toString().toUpperCase();
                    String passwordUser = Password.getText().toString().toUpperCase();
                    // Création d'un URL menant à Spidy.
                    String URL = "mon URL avec mes parametres utilisateur ="+userName+"mot de passe ="+passwordUser;
                    // Instanciation d'un Itent pour lancer l'URL
                    Intent i = new Intent(Intent.ACTION_VIEW);
                    i.setData(Uri.parse(URL));
                    Boolean web = true;
                    // Lancement de l'Activity de l'URL passant l'appli en fond de tâche.
                    startActivity(i);
                    ...
                    }

    A ce moment là, lorsque je clique sur le bouton "ok" le navigateur du téléphone se lance bêtement avec l'URL crée. Maintenant je me demande bien comment je peux contrôler l'état du navigateur... Car au finale ce que j'ai besoin de savoir c'est si la page du navigateur est active ou si elle ne l'est pas (au quel cas je dois en sortir automatiquement pour retourner sur mon application)...

    Donc soit j'ai raté un élément important (comme quoi, n'avoir qu'un seul neurone n'est pas toujours un avantage! ) soit ce n'est pas exactement ce qu'il me faut!

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Salut !

    Dans un premier temps, la réponse donnée est bonne, dans le sens ou sur Android la notion "d'application" n'existe pas au sens "desktop" du terme. On ne démarre jamais une application (non vraiment). Une "Application" sous Android est un groupement logique de services, de "receivers" (broadcast) et d'activités qui vont partager le même code. Et démarrer une application n'est en fait que démarrer une activité (startActivity).

    Prenons l'exemple de ton application:
    Tu envoies l'intent VIEW d'une url... cela revient à dire au système: l'utilisateur veut voir une URL, débrouille toi pour l'afficher.
    Si cette URL pointe sur google-maps, ce n'est pas le navigateur qui va se lancer mais bien l'application "Maps" de google. La raison tient du fait que cette application a dit "j'ai une activité qui gère le VIEW de toutes les URL qui commencent par 'maps.google'".
    Tu pourrais tout à fait réaliser une autre application qui va déclarer la même chose, et le système proposera alors à l'utilisateur de choisir "Maps" ou ta nouvelle application (l'utilisateur aura la possibilité de faire ce choix une fois et pour toute d'ailleurs).

    Tu pourrais aussi avoir une activité qui déclare gérer les "SHARE" d'images, elle sera alors proposée à l'utilisateur à chaque fois qu'il voudra partager une image (depuis la galerie par exemple).

    C'est toute la beauté d'Android, la possibilité d'avoir des activités indépendantes, éventuellement dans des applications séparées, qui travaillent ensemble.

    Un autre exemple est la prise de photo. Tu peux faire toute la tringlerie de gérer le device d'appareil photo (la lumière, le flash, la mise au point, la résolution). Ou alors, simplement, de lancer un Intent REQUEST_IMAGE_CAPTURE, et laisser l'utilisateur choisir l'application d'appareil photo de son choix, prendre la photo avec.
    Mais dans ce cas, comment recevoir l'image prise ? C'est le "startActivityForResult". La fonction dit juste au système: quand tu en as fini avec cette activité, revient sur la précédente (équivalent au bouton "back") c'est à dire celle qui a fait le "startActivityForResult" et passe lui les données de résultat. L'activité originelle recevra donc ces resultats (sous forme d'Intent) dans le onActivityResult.


    En ce qui concerne ton "cas".

    J'ai cru comprendre que tu voulais faire un "login". Dans ce cas le passage d'une application à une autre est fortement déconseillée... D'abord le navigateur... c'est une navigateur. L'utilisateur peut très bien aller sur une autre URL de son choix (et donc quitter ta page avec le bouton OK) sans même que tu en sois informé.
    Il vaut mieux dans ce cas passer par une WebView. Dans la WebView tu gère entièrement les événements, et surtout tu empêche l'utilisateur de naviguer comme il le souhaite.

    Ensuite, à moins d'avoir déjà un site web avec login existant, il n'y a aucun intérêt à créer une page de login juste pour ton application embarquée. L'URL pourrait tout à fait être appelée directement par l'application (sans aucun navigateur ni webview). La partie serveur du login est alors appelée un "web-service".
    J'avais fait deux articles sur mon blog concernant les webservice:
    http://www.developpez.net/forums/blo...vice-partie-1/
    et
    http://www.developpez.net/forums/blo...vice-partie-2/

    Et aussi un tutoriel sur la gestion d’exceptions qui prenaient pour exemple un login:
    http://nicroman.developpez.com/tutor...id/exceptions/

  5. #5
    Membre à l'essai
    Homme Profil pro
    Etudiant en alternance (Développement)
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Etudiant en alternance (Développement)

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut
    Merci à vous Altak et nicroman, le web view m'a posé problème mais grâce aux articles sur les webservices j'ai pu résoudre mon problème, encore merci! ^-^

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

Discussions similaires

  1. [XL-2003] Compter les changements de valeur dans une colonne
    Par clem71 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/04/2009, 00h09
  2. Réponses: 1
    Dernier message: 25/11/2008, 11h03
  3. Réponses: 8
    Dernier message: 18/12/2007, 21h34
  4. <SWING> Changement de fenêtres dans une application
    Par raspac dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 01/06/2007, 10h41
  5. procédure stockée pour renvoyer un état dans une application
    Par erickoffi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/10/2005, 19h05

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