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 :

Savoir quel élément lance le onResume() de l'Activity


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Points : 139
    Points
    139
    Par défaut Savoir quel élément lance le onResume() de l'Activity
    bonjour,

    je voudrais savoir s'il y a un moyen de connaitre l'élément (appwidget ou icone) qui fait passer mon activity de OnPause() a Onresume() ?

    en fait mon application peut être lancé depuis l'appwidget et depuis l'icone, mais selon le moyen, les infos seront diférentes.

    mon application est un bloc note, l'appwidget permet d'afficher une des pages sur le bureau et si l'utilisateur clique sur l'appwidget mon application s'ouvre sur la page de l'appwidget, par contre si l'utilisateur lance l'application depuis l'icone c'est la dernière page du bloc note qui doit être affiché.

    voici ma fonction pour savoir quelle page afficher :

    Code java : 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
    	private void affichagePage() {
     
    			Intent intent = getIntent();
    			int index = intent.getIntExtra("com.bibi.blocnote:index", -1);
    			Page p;
     
    			if (index < 0)
    				p = Bloc.dernierepage(this);
    			else
    				p = Bloc.recupPageParIndex(this, index);
     
    			if (p != null) {
    				titre.setText(p.titre);
    				texte.setText(p.texte);
    			} else {
    				titre.setText("Page 1");
    			}
     
    	}

    voici la création de l'intent de mon appwidget:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	    	Intent intentedition = new Intent(context, Editeur.class);
    	    	intentedition.putExtra("com.bibi.blocnote:index", Integer.decode(info[Bloc.INDEX_WIDGET]));
    	    	PendingIntent pendingedition = PendingIntent.getActivity(context, appWidgetId, intentedition, 0);

    je fais appel a cette méthode dans le onResume().

    si l'application n'est pas lancé:
    lorsque l'application est lancée depuis l'icone ça fonctionne correctement, lorsque qu'elle est lancée depuis l'appwidget, c'est toujours la dernière page qui s'affiche (au lieu de celle de l'appwidget).

    si l'application est lancée (donc en pause):
    lorsque l'application passe au premier plan depuis l'appwidget ça fonctionne correctement, si c'est par l'icone, c'est la page qui était active au moment du onPause() qui est affiché (et non la dernière du bloc).

    comme si lors du passage de onPause() à onResume() via l'icone, il récupérait les paramètres de l'intent précédent (donc celui de l'appwidget avec l’extra renseigné).

    j’espère avoir été clair dans les explications.

    la question est donc:
    lorsque l'application passe de l’état onPause() à onResume() via l'icone, android utilise t'il un intent ?
    si non, comment savoir si l'activity a été passé au premier plan via un clic sur l'icone.

    Merci.

  2. #2
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    La fonction onNewIntent() est normalement appelée si l'intent a changé
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    je sais pas si j'ai bien utilisé cette méthode mais c'est encore pire.

    voila ce que j'ai fais:

    Code java : 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
    20
    	@Override
    	protected void onNewIntent(Intent intent){
    		super.onNewIntent(intent);
    		int index = intent.getIntExtra("com.bibi.blocnote:index", -1);
    		Page p;
     
    		Toast.makeText(this, ""+index, Toast.LENGTH_LONG).show();
     
    		if (index < 0)
    			p = Bloc.dernierepage(this);
    		else
    			p = Bloc.recupPageParIndex(this, index);
     
    		if (p != null) {
    			titre.setText(p.titre);
    			texte.setText(p.texte);
    		} else {
    			titre.setText("Page 1");
    		}
    	}

    j'ai mis un Toast pour savoir quand je passais dans la fonction mais jamais rien ne s' affiche, comme si je ne passais jamais dans cette fonction, de plus dans mes champs titre et texte il n'y a rien non plus, donc je pense que je ne passe pas dans cette fonction, je ne dois pas bien l'utiliser.

    Merci.

  4. #4
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    le onNewIntent est appelé juste avant le onResume, si l'activité est en mode "singleOnTop" (sinon, à chaque intent son instance d'activité normalement).



    lorsque l'application passe au premier plan depuis l'appwidget ça fonctionne correctement
    Ce n'est pas toujours la dernière page ?

    si c'est par l'icone, c'est la page qui était active au moment du onPause() qui est affiché (et non la dernière du bloc).
    L'icone "reveille" juste l'application, et la repasse au premier plan, donc dans l'état ou elle état avant être cachée. Exactement comme la liste de lancement rapide.
    Il doit être possible dans le onNewIntent (encore faut-il que l'activité soit singleOnTop) de regarder les flags de l'intent:


    Au fait... juste une question, l'activité est bien déclarée comme "singleOnTop" ? Il est aussi possible de la déclarer en "noHistory" (un back vire completement l'application de la pile).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Points : 139
    Points
    139
    Par défaut
    bonjour,

    Mon activité n'était pas déclarée "singleOnTop", je n'ai pas trouvé singleOnTop, je pense que c'est "singleTop" ?

    donc j'ai modifié mon code de l'appwidget:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	    	Intent intentedition = new Intent(context, Editeur.class);
    	    	intentedition.putExtra("com.bibi.blocnote:index", Integer.decode(info[Bloc.INDEX_WIDGET]));
    	    	intentedition.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    	    	PendingIntent pendingedition = PendingIntent.getActivity(context, appWidgetId, intentedition, 0);

    le code du manifest:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <activity
                android:name="com.bibi.blocnote.Editeur"
                android:label="@string/app_name" 
                android:launchMode="singleTop">

    le code onNewIntent :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	@Override
    	protected void onNewIntent(Intent intent){
    		super.onNewIntent(intent);
     
    		if(!affichageListe)
    			affichagePage(intent);
     
    		affichageListe = false;
    	}

    et ma fonction:

    Code java : 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
    	private void affichagePage(Intent intent) {
     
    		int index = intent.getIntExtra("com.bibi.blocnote:index", -1);
    		Page p;
    		Toast.makeText(this, ""+index, Toast.LENGTH_LONG).show();
     
    		if (index < 0)
    			p = Bloc.dernierepage(this);
    		else
    			p = Bloc.recupPageParIndex(this, index);
     
    		if (p != null) {
    			titre.setText(p.titre);
    			texte.setText(p.texte);
    		} else {
    			titre.setText("Page 1");
    		}
     
    	}

    je passe bien dans le onNewIntent et dans ma fonction mais il ne me trouve jamais l'extra et donc m'affiche toujours la dernière page.

    j'ai également fait avec le "nohistory" mais c'est pareil.

    Merci.

  6. #6
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Tu as essayé avec le flag FLAG_UPDATE_CURRENT dans PendingIntent.getActivity ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 216
    Points : 139
    Points
    139
    Par défaut
    bonjour,

    désolé de ma réponse tardive.

    j'ai mis le flag FLAG_UPDATE_CURRENT a mon PendingIntent.getActivity et maintenant ça fonctionne parfaitement.

    Merci nicroman.

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

Discussions similaires

  1. [Système/Fichiers/API] XML data binding, comment savoir quel élément de type "choice" est présent ?
    Par Pascale38 dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/05/2011, 09h18
  2. Savoir quel élément de la liste a été cliqué
    Par marcolo21 dans le forum ASP
    Réponses: 4
    Dernier message: 08/11/2010, 19h04
  3. Savoir quel élément a le focus
    Par MayOL69bg dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/04/2007, 15h28
  4. Comment savoir quel élément à lancer l'événement ?
    Par Vanish dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 08/02/2007, 14h51
  5. [Struts] Savoir quel link a lancé l'action
    Par vallica dans le forum Struts 1
    Réponses: 5
    Dernier message: 10/04/2006, 10h26

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