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 :

Plusieurs actions clic AppWidget


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    Par défaut Plusieurs actions clic AppWidget
    bonjour,

    j'ai crée un widget pour mon application bloc note qui affiche une des pages du bloc (au choix de l'utilisateur)

    je voudrai que lorsque l'utilisateur clique sur le texte de l' appwidget je lance mon appli avec la page de l' appwidget .

    je sais lancer une activity depuis le widget mais je ne sais pas comment lancer l'activity et lui passer la page à afficher.

    voici le code de mon widget :

    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
        	final int N = appWidgetIds.length;
     
            for (int i = 0; i < N; i++) {
            	int appWidgetId = appWidgetIds[i];
     
    	    	Intent intent = new Intent(context, Editeur.class);
    	    	PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);
     
    	        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
     
    	        views.setTextViewText(R.id.txv_texte_widget, texte);
    	        views.setTextViewText(R.id.txv_titre_widget, titre);
     
    	        views.setOnClickPendingIntent(R.id.txv_texte_widget, pending);
     
    	        appWidgetManager.updateAppWidget(appWidgetId, views);
    ce code me permet de lancer l'application mais je voudrais ensuite lui passer les paramètres.

    Merci.

  2. #2
    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
    Oui c'est très bien...

    Mais ou est le problème ? Quelle est la question ?

    Attention aux PendingIntent(s). Ce ne sont pas des "Intent" classiques. Ils sont sérialisé, et référencés de manière unique par: la classe, l'action, l'Uri, et un identifiant interne (un des deux paramètres 0 ici). Donc dans ton code, tous les PendingIntents seront en fait le même.

    Ensuite une astuce depuis Java 5 (ou 6 je sais plus)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    final int N = appWidgetIds.length;
     
            for (int i = 0; i < N; i++) {
            	int appWidgetId = appWidgetIds[i];
                    ...
    S'écrit de manière plus simple avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int appWidgetId : appWidgetIds) {
        ...
    }

  3. #3
    Membre confirmé
    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
    Par défaut
    re bonjour,

    donc la question était : comment passer des paramètres a l'activité ?

    après quelques recherche j'ai trouve. (je n'utilisais pas le getIntent())

    mais j'ai un autre problème :

    j'ai renseigné mes parametres dans mon intent :

    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", index_affiche);
    	    	PendingIntent pendingedition = PendingIntent.getActivity(context, 0, intentedition, 0);

    après, je récupère cette valeur dans mon Activity :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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);

    mais je ne comprend pas pourquoi ma variable index est toujours égal a 0.
    même lorsque je met une valeur en dur lorsque je crée mon intent.

    le problème est il lié aux pendingintent ?
    comment je fais pour différencier mes pendingintent, ou je peux utiliser le même pendingintent pour mes deux actions ?

    Merci.

  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
    Le problème est sans doute lié au PendingIntent...

    Là à chaque instance de la boucle, la valeur de pendingedition sera toujours la même, sur le premier pending-intent créé... à savoir celui de l'index #0.

    Puisque c'est le même "intent" utilisé à chaque fois (meme action, meme url, meme classe), il faut différencier avec le requestCode.

    Et bien utiliser le flag FLAG_UPDATE_CURRENT dans l'appel à getActivity.

  5. #5
    Membre confirmé
    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
    Par défaut
    bonjour,

    j' ai fais les modifs et ça fonctionne plutôt pas mal, sauf quelques petits détail, voici mon code:

    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
    for (int appWidgetId : appWidgetIds) {
     
    	    	Intent intentchangement = new Intent(context, WidgetDialog.class);
    	    	PendingIntent pendingchangement = PendingIntent.getActivity(context, 0, intentchangement, 0);
     
    	    	Intent intentedition = new Intent(context, Editeur.class);
    	    	intentedition.putExtra("com.bibi.blocnote:index", index_affiche);
    	    	PendingIntent pendingedition = PendingIntent.getActivity(context, 1, intentedition, PendingIntent.FLAG_UPDATE_CURRENT);
     
    	        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
     
    	        views.setTextViewText(R.id.txv_texte_widget, texte);
    	        views.setTextViewText(R.id.txv_titre_widget, titre);
     
    	        views.setOnClickPendingIntent(R.id.btn_voir, pendingchangement);
    	        views.setOnClickPendingIntent(R.id.txv_texte_widget, pendingedition);
     
    	        appWidgetManager.updateAppWidget(appWidgetId, views);
     
            }

    et les détails :

    - Lorsque j' exécute le premier PendingIntent (pendingchangement) mon application reviens en haut de la liste est t'il possible de ne pas la mettre au premier plan ? mettre uniquement l'activity que je lance ? (l'activity de je veux lancer a le thème: @android:style/Theme.Translucent.NoTitleBar donc j'ai pas envie que l'utilisateur se retrouve de nouveaux sur mon appli alors qu'il était sur son bureau).

    - Lorsque j'execute le deuxieme PendingIntent (pendingedition) je voudrais d'abord vérifier si l'activity est déjà dans la pile (en pause ou autre) et si elle n'existe pas, lancer l'activity tel que je le fais actuellement et si elle existe, lui passer les paramètres et la remettre en haut de la pile.

    Merci.

  6. #6
    Membre confirmé
    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
    Par défaut
    bonjour,

    j'ai résolus les petits problèmes:

    - Lorsque j' exécute le premier PendingIntent (pendingchangement) mon application reviens en haut de la liste est t'il possible de ne pas la mettre au premier plan ? mettre uniquement l'activity que je lance ? (l'activity de je veux lancer a le thème: @android:style/Theme.Translucent.NoTitleBar donc j'ai pas envie que l'utilisateur se retrouve de nouveaux sur mon appli alors qu'il était sur son bureau).
    j'ai changé le thème de mon activity qui est désormais en plein écran, maintenant j'ai toujours le problème de mon application qui est "active", lorsque je ferme l'activity j' ai rajouté :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    moveTaskToBack(true);

    qui me permet de remettre mon application en arrière plan.

    pour le deuxieme, a savoir :

    - Lorsque j'execute le deuxieme PendingIntent (pendingedition) je voudrais d'abord vérifier si l'activity est déjà dans la pile (en pause ou autre) et si elle n'existe pas, lancer l'activity tel que je le fais actuellement et si elle existe, lui passer les paramètres et la remettre en haut de la pile.
    ben en fait ça le fessait déjà c'est moi qui me trompais.

    Merci nicroman.

  7. #7
    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
    j'ai toujours le problème de mon application qui est "active", lorsque je ferme l'activity
    Qu'entends tu par "active" ?

    Android maintient une "pile" d'activités... quand on fait "back" (ou on appelle finish() dans le code), Android remet l'activité précédente. Si c'était le bureau, c'est le bureau qui est affiché (back est alors identique à "home").

  8. #8
    Membre confirmé
    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
    Par défaut
    bonjour,

    en fait, je met un exemple :

    - j' utilise mon appli, je clique sur le bouton home.
    - je reviens sur mon bureau
    - je lance d' autres applis, je passe des appels,...
    - je vais dans les appwidget, je met mon appwidget sur le bureau, l'activite de configuration se lance.
    - lorsque l'activity de configuration se ferme, je me retrouve dans la derniere application mais pas dans la liste de mes widgets ni sur le bureau.


  9. #9
    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
    il me semble que c'est le comportement par défaut... (et donc "normal")...

    Ou j'ai pas tout saisi

  10. #10
    Membre confirmé
    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
    Par défaut
    bonjour,

    j'ai trouvé d'où venait le problème, je me sert de la même activity pour la configuration lors de l'ajout de l' appwidget et pour les changements après sa création.

    pour ne pas me retrouver dans mon application lorsque je veux juste modifier mon appwidget, je faisais :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    moveTaskToBack(true);

    et donc c'est pourquoi lorsque je rajouté mon appwidget sur le bureau, je ne me retrouvais pas sur le bureau mais sur la deuxième application plus récente comme si je faisais deux fois back.

    Merci.

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

Discussions similaires

  1. [Spring MVC] Plusieurs actions sur le même formulaire
    Par aloha dans le forum Spring Web
    Réponses: 3
    Dernier message: 26/08/2006, 15h22
  2. Plusieurs actions possible dans un <form>
    Par lodan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 18/08/2006, 21h23
  3. action qui déclenche plusieurs actions
    Par imane_bennouna dans le forum Struts 1
    Réponses: 6
    Dernier message: 08/08/2006, 15h48
  4. [STRUTS] Plusieurs actions dans une meme page
    Par DarkWark dans le forum Struts 1
    Réponses: 22
    Dernier message: 10/01/2006, 16h18
  5. [struts]plusieurs actions sur 1 JSP sans DispatchAction
    Par Le Marlou dans le forum Servlets/JSP
    Réponses: 15
    Dernier message: 23/03/2005, 14h10

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