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 :

Widget et PreferenceActivity


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut Widget et PreferenceActivity
    Bonjour à tous,
    tout d'abord merci a ce super forum et a ses participants, j'en ai fait ma bible ces derniers temps
    Etant noob en dev android, je me suis créé une petite appli pour me connecter à mon serveur. Ca marche plutot bien. Pour ameliorer mon appli, je voulais rajouter une appWidget dans le but d'envoyer des commandes post à mon serveur. Le top serait d'avoir plusieurs widget sur le bureau ayant chacun leurs infos à envoyer. Pour le widget, pas de soucis, pour la preferenceActivity, pas de soucis, mais la ou je coince, c'est sur le onReceive du widget. J'ai bien l'appWidgetId qui correspond au widget clické, mais je ne sais pas du tout comment récupérer les autres infos (entrées dans la prefActivity) de ce widget.
    Dans mon prefActivity, j'entre :
    1- text : le nom du widget (pour affichage sur le bureau)
    2- param1
    3- param2

    Comment puis-je récuperer param1 et param2 dans le onReceive pour executer ma commande de connection au serveur ?

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    public class Widget extends AppWidgetProvider {
     
    	public static final String ACTION_LANCER_APPLICATION = "com.formation.appwidget.LANCER_APPLICATION";
     
    	@Override
    	public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {	
    		super.onUpdate(context, appWidgetManager, appWidgetIds);
    		Update(context, appWidgetManager, appWidgetIds);
    	}
     
    	@Override
    	public void onReceive(Context context , Intent intent){
    		super.onReceive(context, intent);
    		Log.i("test", " intent.GetAction = " + intent.getAction());
    		if(intent.getAction().equals(ACTION_LANCER_APPLICATION)){
    			mesActions(context);
    		}
    	}
     
    	public static void Update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
    		SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
    		String text = settings.getString("text", "Hello");
     
    		String _param1 = settings.getString("param1", "nul");
    		Log.i("test", "_param1 = " +_param1);
     
    		for(int i=0; i<appWidgetIds.length;i++){
    			RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.main);
    			views.setTextViewText(R.id.text, text);
     
    			Intent intent = new Intent(context, Widget.class);
    			intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
    			intent.setAction(ACTION_LANCER_APPLICATION);
    			//on lie l'intent a l'action
    			PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    			views.setOnClickPendingIntent(R.id.text, pendingIntent);
    			appWidgetManager.updateAppWidget(appWidgetIds[i],views);
     
    		}
     
    	}
     
    	private void mesActions(Context context) {
    		Log.i("test", "onReceive action_lancer_appli");	
    	}	
    }

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 32
    Par défaut
    Citation Envoyé par geo___ Voir le message
    Bonjour à tous,
    tout d'abord merci a ce super forum et a ses participants, j'en ai fait ma bible ces derniers temps
    Etant noob en dev android, je me suis créé une petite appli pour me connecter à mon serveur. Ca marche plutot bien. Pour ameliorer mon appli, je voulais rajouter une appWidget dans le but d'envoyer des commandes post à mon serveur. Le top serait d'avoir plusieurs widget sur le bureau ayant chacun leurs infos à envoyer. Pour le widget, pas de soucis, pour la preferenceActivity, pas de soucis, mais la ou je coince, c'est sur le onReceive du widget. J'ai bien l'appWidgetId qui correspond au widget clické, mais je ne sais pas du tout comment récupérer les autres infos (entrées dans la prefActivity) de ce widget.
    Dans mon prefActivity, j'entre :
    1- text : le nom du widget (pour affichage sur le bureau)
    2- param1
    3- param2

    Comment puis-je récuperer param1 et param2 dans le onReceive pour executer ma commande de connection au serveur ?

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    public class Widget extends AppWidgetProvider {
     
    	public static final String ACTION_LANCER_APPLICATION = "com.formation.appwidget.LANCER_APPLICATION";
     
    	@Override
    	public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {	
    		super.onUpdate(context, appWidgetManager, appWidgetIds);
    		Update(context, appWidgetManager, appWidgetIds);
    	}
     
    	@Override
    	public void onReceive(Context context , Intent intent){
    		super.onReceive(context, intent);
    		Log.i("test", " intent.GetAction = " + intent.getAction());
    		if(intent.getAction().equals(ACTION_LANCER_APPLICATION)){
    			mesActions(context);
    		}
    	}
     
    	public static void Update(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
    		SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
    		String text = settings.getString("text", "Hello");
     
    		String _param1 = settings.getString("param1", "nul");
    		Log.i("test", "_param1 = " +_param1);
     
    		for(int i=0; i<appWidgetIds.length;i++){
    			RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.main);
    			views.setTextViewText(R.id.text, text);
     
    			Intent intent = new Intent(context, Widget.class);
    			intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
    			intent.setAction(ACTION_LANCER_APPLICATION);
    			//on lie l'intent a l'action
    			PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    			views.setOnClickPendingIntent(R.id.text, pendingIntent);
    			appWidgetManager.updateAppWidget(appWidgetIds[i],views);
     
    		}
     
    	}
     
    	private void mesActions(Context context) {
    		Log.i("test", "onReceive action_lancer_appli");	
    	}	
    }
    Salut je peux te passer ce lien : http://developer.android.com/referen...e-summary.html

    sinon essai d'associer param1 à un text view
    de meme pour param2

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut
    j'y avais pensé aussi, mais je trouvais cette solution pas très propre, je pensais qu'il existait une solution plus simple. Dans l'attente d'autres idees, je vais faire comme ca. Merci beaucoup en tout cas

  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
    Attention à l'utilisation de PendingIntent....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    			//on lie l'intent a l'action
    			PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    			views.setOnClickPendingIntent(R.id.text, pendingIntent);
    			appWidgetManager.updateAppWidget(appWidgetIds[i],views)
    Dans le code ci-dessus, le "Pending Intent" manager va trouver l'intent se rapprochant le plus de context/0/ACTION_LANCER_APPLICATION donc *tous* les pending intent seront identiques ....

    Pour palier ceci, il faut mettre le widgetId dans le premier parametre (à la place de 0), et hop, chaque widget aura son propre pending-intent.

    Ensuite pour le passage d'informations, ca se fait par extra... mais on peut aussi le faire par SharedPreferences ("name_#" par exemple etant le parametre "name" du widget #).

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut
    Pour palier ceci, il faut mettre le widgetId dans le premier parametre (à la place de 0), et hop, chaque widget aura son propre pending-intent.
    Excelllllent !!! c'est exactement ce que je voulais, ca marche nickel si je mets a la place du 2ieme parametre du pendingIntent le widgetId.
    J'ai du coup, mis un flag_cancel_current a la place du second 0, sinon j'avais un décalage des infos n-1 pour le widget n.

    Merci beaucoup à tous pour votre aide

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Par défaut
    bon ....ca marche nickel sauf que si j'éteins mon tel, quand je rallume, tous les widgets contiennent les mêmes infos, celles du dernier créé.
    Comment faites vous pour "sauvegarder" les params des widgets ? dans un xml ?

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

Discussions similaires

  1. [Swing]JTreeMap : un widget open source
    Par Jense dans le forum Composants
    Réponses: 5
    Dernier message: 25/11/2005, 18h31
  2. Positionner un WidGet dans une table
    Par sorry60 dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 05/11/2005, 19h22
  3. comment modifier les widgets dans une fenètre??
    Par afrikha dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 14/10/2005, 14h48
  4. [Tkinter] widget Text
    Par t_om84 dans le forum Tkinter
    Réponses: 8
    Dernier message: 17/06/2005, 09h30
  5. [SWT]Eclipse Java : swt.widgets.Table
    Par watson dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 01/10/2003, 09h07

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