Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android]

mon widget(Appwidget) ne se met plus à jour après un moment

    2 janvier 2013 à 17:36:51

    Bonjour,

    Je suis un débutant développeur android. Je suis présentement en train de travailler sur une application utilisant des Appwidgets pour afficher des proverbes (précédemment stockés dans une Base de Données) à l'utilisateur de façon périodique (après un temps de défilement choisie par l'utilisateur dans les paramètres de l'application, par défaut ce temps de défilement est de 15 minutes.

    Au démarrage de l'application je récupère tous les proverbes de la Base de Données que je stocke dans une liste de proverbes (variable de type List<Proverbe>. Après ceci je pioche de façon aléatoire un proverbe de la liste des proverbes puis j'affiche le message dans le widget. Lorsqu'on click sur le widget une activité s'ouvre affichant le proverbe actuellement afficher dans le widget avec son explication.

    Après chaque période(temps de défilement indiqué par l'utilisateur dans les paramètres de l'application),un nouveau proverbe est pioché puis affiché dans le widget à la place du proverbe de l'ancien proverbe.

    Problème :

    Lors de mes tests j'ai constaté que l'application fonctionne normalement lorsque je la démarre. Mais après une journée de fonctionnement elle se plante(le proverbe affiché dans le widget ne change plus et le widget ne répond plus au click).

    Voici mon code :

    Service chargé de mettre à jour le proverbe affiché dans le widget


    package com.ig.proverbwid.services;
    
    import com.ig.proverbwid.R;
    import com.ig.proverbwid.widgets.WidgetSimple;
    
    import android.app.IntentService;
    import android.appwidget.AppWidgetManager;
    import android.content.ComponentName;
    import android.content.Intent;
    import android.util.Log;
    import android.widget.RemoteViews;
    
    /**
     * Classe <b>ServiceDeMiseAJourPeriodiqueDuTextAfficherParLeWidget</b><br/>
     * Service De Mise A Jour Periodique Du Text Afficher Par Les Widgets simples</br>
     * ce service sera appelé à chaque fois qu'on doit afficher un nouveau proverbe
     * 
     *
     */
    public class S_MAJPeriodiqTextAfficherWidgetSimple extends IntentService {
    
    	public S_MAJPeriodiqTextAfficherWidgetSimple() {
    		super("Service De Mise A Jour Periodique Du Text Afficher Par Le Widget");
    		// TODO Auto-generated constructor stub
    	}
    
    	@Override
    	protected void onHandleIntent(Intent unIntent) {
    		// TODO Auto-generated method stub
    		
    //		Log.v("Infos Service", "service De MiseAJour Periodique Du Text AfficherPar les Widgets start ");
    		
    		
    		
    		ComponentName myCompName = new ComponentName(getApplicationContext(), WidgetSimple.class);
    		AppWidgetManager myAppWidManager = AppWidgetManager.getInstance(getApplicationContext());
    		int []widgetsIds = myAppWidManager.getAppWidgetIds(myCompName);
    		
    		for(int id:widgetsIds)
    		{
    			RemoteViews vues = new RemoteViews(getApplicationContext().getPackageName(), R.layout.my_widget_provider_initial_layout);
    			vues.setTextViewText(R.id.textProverb,unIntent.getStringExtra(WidgetSimple.TEXTE_DU_PROVERBE_A_AFFICHER_DANS_LE_WIDGET));
    			myAppWidManager.updateAppWidget(id, vues);
    			Log.v("MAJ", "MAJ TEXT Widget N° "+String.valueOf(id) );
    		}
    		
    		
    		Log.v("Infos Service", "service De MiseAJour Periodique Du Text AfficherPar les Widgets end ");
    		stopSelf();
    	}
    
    }
    



    Classe représentant le widget


    package com.ig.proverbwid.widgets;
    
    import java.util.List;
    import android.app.AlarmManager;
    import android.app.PendingIntent;
    import android.appwidget.AppWidgetManager;
    import android.appwidget.AppWidgetProvider;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
    import android.preference.PreferenceManager;
    import android.util.Log;
    import android.widget.RemoteViews;
    
    import com.ig.BDD.DAO_Proverbe;
    import com.ig.BDD.Proverbe;
    import com.ig.proverbwid.R;
    import com.ig.proverbwid.activites.A_ProverbeEtExplicationWidgetSimple;
    import com.ig.proverbwid.metier.MyFactory;
    import com.ig.proverbwid.services.S_CreationRemplissageTableProverbe;
    import com.ig.proverbwid.services.S_MAJPeriodiqTextAfficherWidgetSimple;
    import com.ig.proverbwid.services.S_MAJWidgetsSimple;
    import com.ig.proverbwid.services.S_RecuperationListProverbAAfficherDansWidget;
    
    
    
    
    public class WidgetSimple extends AppWidgetProvider {
    	
    	/**
    	 * liste contenant les proverbes qui seront affichés dans le widget
    	 */
    	static	protected List<Proverbe>listeDesProverbes;
    	
    	/**
    	 * taille de la liste contenant les proverbes 
    	 */
    	static	protected int tailleListe;
    	
    	/**
    	 * le proverbe actuellement affiché par le widget
    	 */
    	static	protected String proverbeAfficheDansLeWidget;
    	
    	/**
    	 * l'explication du proverbe actuellement affiché par le widget
    	 */
    	static	protected String explicationProverbeAfficheDansLeWidget;
    	
    	/**
    	 * constante servant à identifier un widget simple
    	 */
    	static public final String ID = "W_Simple";
    	
    	/**
    	 * constante contenant une chaîne de caractères qui représente le temps de défilement des proverbes au niveau des préférences utilisateur
    	 */
    	static public final String id_TempsDefilement = "tempsDefilementProverbe";
    
    	/**
    	 * pointeur sur le widget simple
    	 */
    	protected static Context myContext;//sera utilisé pour gérer l'intent à envoyer au niveau de la gestion des préférences
    	
    	/**
    	 * contient les préférences partagées de l'utilisateur
    	 */
    	static protected SharedPreferences preferencesUtilisateur;
    
    	/**
    	 *  ecouteur de changement de préférence utilisateur 
    	 */
    	static protected final OnSharedPreferenceChangeListener myPreferenceChangeListener = new OnSharedPreferenceChangeListener() 
    	{
    		/* fonction appelée à chaque changement de préférences*/
    		public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
    				String key) {
    			// TODO Auto-generated method stub
    
    			/* Actions à effectuer à la suite d'une modification de préference utilisateur */
    
    
    			/* Recupération de la valeur de la préférence dont la clé est  id_TempsDefilement i.e la "Période de défilement des proverbes" */
    			String PeriodeDefilementUtilisateur =	sharedPreferences.getString(id_TempsDefilement, "-1");		
    			Log.w("Temps defilement utilisateur", PeriodeDefilementUtilisateur);
    
    			Intent myIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
    			if(myContext != null)
    			{
    
    				myContext.sendBroadcast(myIntent);
    				
    				/* afin d'arrêter l'alarme on doit préciser l'intent qui a permis de la lancer */ 
    				Intent mIntent = new Intent(ACTION_ARRIVEE_DUN_NOUVEAU_PROVERBE_WIDGET_SIMPLE);
    				PendingIntent mPendingIntent = PendingIntent.getBroadcast(myContext, 0, mIntent, 0);
    				alarmApplication.cancel(mPendingIntent);//on arrête l'alarme en fournissant en paramètre l'intent qui a permis son lancement
    
    			//	verficationStatutDeLaBDD(myContext);
    			MyFactory.verficationStatutDeLaBDD(myContext, MyFactory.ID_NONE);
    				
    
    				//alarmApplication.setRepeating(AlarmManager.RTC, 2000, PeriodeDefilementProverbe, mPendingIntent);//on redémarre l'alarme avec un nouveau temps de répétition(choisi par l'utilisateur dans la préférence)
    				Log.w("Preference", "Intent relancé");
    			}
    
    		}
    
    	};
    
    	/**
    	 * gère le temps de defilement des proverbes 
    	 */
    	static protected AlarmManager alarmApplication;
    	
    	/**
    	 * temps de defilement des proverbes en miliseconde(	1 seconde = 1 000 milisecondes)
    	 */
    	static  protected long PeriodeDefilementProverbe;
    
    	/**
    	 * identifiant qui représente de façon unique l'action ACTION_TABLE_PROVERBE_NON_VIDE_WIDGET_SIMPLE au niveau d'un widget simple
    	 */
    	public static final String ACTION_TABLE_PROVERBE_NON_VIDE_WIDGET_SIMPLE = "com.ig.proverbwid.intent.action.TABLE_PROVERBE_NON_VIDE_WIDGET_SIMPLE";
    
    
    	/**
    	 * identifiant qui représente de façon unique l'action ACTION_LISTE_PROVERBE_ENVOYEE_WIDGET_SIMPLE au niveau d'un widget simple
    	 */
    	public static final String ACTION_LISTE_PROVERBE_ENVOYEE_WIDGET_SIMPLE = "com.ig.proverbwid.intent.action.LISTE_PROVERBE_ENVOYEE_WIDGET_SIMPLE";
    	
    
    	/**
    	 * identifiant qui représente de façon unique l'action ACTION_ARRIVEE_DUN_NOUVEAU_PROVERBE_WIDGET_SIMPLE au niveau d'un widget simple
    	 */
    	public static final String ACTION_ARRIVEE_DUN_NOUVEAU_PROVERBE_WIDGET_SIMPLE = "com.ig.proverbwid.intent.action.ARRIVEE_DUN_NOUVEAU_PROVERBE_WIDGET_SIMPLE";
    	
    
    	/**
    	 * identifiant qui représente de façon unique l'action ACTION_DEMARER_ACTIVITE_PROVERBE_EXPLICATION au niveau d'un widget simple
    	 */
    	public static final String ACTION_DEMARER_ACTIVITE_PROVERBE_EXPLICATION = "com.ig.proverbwid.intent.action.DEMARER_ACTIVITE_PROVERBE_EXPLICATION";
    	
    			/* idenfiants utilisés pour récupérer les valeurs envoyées par l'intermédiaire des intents */
    	/**
    	 * identifiant avec lequel on récupère les idenfiants des instances de widget créés 
    	 */
    	public static final String ID_DES_WIDGETS = "com.ig.proverbwid.widgetsIds";
    	
    	/**
    	 * identifiant avec lequel on récupère la liste des proverbes 
    	 */
    	public static final String LISTE_PROVERBES = "com.ig.proverbwid.listeProverbes";
    
    	
    	/**
    	 * identifiant avec lequel on récupère le texte du proverbe à afficher dans le widget
    	 */
    	public static final String TEXTE_DU_PROVERBE_A_AFFICHER_DANS_LE_WIDGET = "com.ig.proverbwid.texteDuProverbeAfficheDansLeWidget";
    	
    	/**
    	 * identifiant avec lequel on récupère le texte de l'explication du proverbe à afficher dans le widget
    	 */
    	public static final String TEXTE_EXPLICATION_DU_PROVERBE_A_AFFICHER_DANS_LE_WIDGET = "com.ig.proverbwid.texteExplicationDuProverbeAfficheDansLeWidget";
    
    	/**
    	 * identifiant avec lequel on récupère le texte du proverbe actuellement affiché dans le widget
    	 */
    	public static final String TEXTE_DU_PROVERBE_ACTUEL = "com.ig.proverbwid.texteDuProverbeActuel";
    	
    	/**
    	 * identifiant avec lequel on récupère le texte de l'explication du proverbe actuellement affichée dans le widget
    	 */
    	public static final String TEXTE_EXPLICATION_DU_PROVERBE_ACTUEL = "com.ig.proverbwid.texteExplicationDuProverbeActuel";
    
    	/* Textes à afficher sur l'activité : PROVERBE + EXPLICATION */
    	
    	/**
    	 * identifiant avec lequel on récupère le texte du proverbe à afficher dans l'activité affichant un proverbe avec son explication
    	 */
    	public static final String PROVERBE_AFFICHER_DANS_L_ACTIVITE = "com.ig.proverbwid.proverbeActivite";
    	
    	/**
    	 * identifiant avec lequel on récupère le texte de l'explication du proverbe à afficher dans l'activité affichant un proverbe avec son explication
    	 */
    	public static final String EXPLICATION_AFFICHER_DANS_L_ACTIVITE = "com.ig.proverbwid.explicationActivite";
    
    
    	/* fonction appelée à chaque mise à jour du widget ou des instances du widget
    	 * et à chaque création d'une nouvelle instance de widget simple
    	 */
    	@Override
    	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
    			int[] appWidgetIds) {
    		// TODO Auto-generated method stub
    		//super.onUpdate(context, appWidgetManager, appWidgetIds);
    
    	Log.w("ON UPDATE", "ActivitePrincipale.OnUpdate");	
    
    
    		Intent intentSignalantlaMAJDesWidgets = new Intent(context, S_MAJWidgetsSimple.class);
    		intentSignalantlaMAJDesWidgets.putExtra("com.ig.proverbwid.widgetsIds", appWidgetIds);//encapsulation des ids des instances de widget
    
    		/* on verifie si le variable qui stocke le texte du proverbe n'est pas vide
    		 - si elle n'est pas vide alors on encapsule le texte(le proverbe actuel) dans un intent qu'on envoi au service qui se charge de mettre à jour le texte
    		   c'est ce texte(le proverbe actuel) qui sera affiché sur les nouvelles instances du widget è leurs création
    		   raison pour laqulle on verifie d'abord si ce n'est pas un texte vide
    		 */
    		if(!(proverbeAfficheDansLeWidget==null))//le texte ne doit pas être vide sinon cela générera un message d'erreur
    		{
    			Log.w("Texte PRoverbe", "non-Vide");
    			intentSignalantlaMAJDesWidgets.putExtra("com.ig.proverbwid.texteDuProverbeActuel", proverbeAfficheDansLeWidget);
    		}
    		if(!(explicationProverbeAfficheDansLeWidget==null))//le texte ne doit pas être vide sinon cela générera un message d'erreur
    		{
    			Log.w("Texte Explication", "non-Vide");
    			intentSignalantlaMAJDesWidgets.putExtra("com.ig.proverbwid.texteExplicationDuProverbeActuel", explicationProverbeAfficheDansLeWidget);
    		}
    
    		//Log.v("NOUVELLE INSTANCE DE WIDGET", "Texte à afficher = " + proverbeAfficheDansLeWidget);
    		//intentSignalantlaMAJDesWidgets.putExtra("com.ig.proverbwid.texteDuProverbeActuel", proverbeAfficheDansLeWidget);//encapsulation des ids des instances de widget
    		PendingIntent pendIntentSignalantlaMAJDesWidgetsIntent = PendingIntent.getService(context, 0, intentSignalantlaMAJDesWidgets, 0);
    		Log.v("Infos Service", "Preparation demarrage service attribution de clickListener aux Widgets");
    		
    		/* on démarre le service d'attribution d'écouteur de click(ce service associe un écouteur de click à chaque instance de widget créé) */
    		context.startService(intentSignalantlaMAJDesWidgets);
    
    	}
    
    	/* Fonction appelée à  l'instanciation de la premiere instance du widget simple*/  
    	@Override
    	public void onEnabled(Context context) {
    		// TODO Auto-generated method stub
    
    
    		super.onEnabled(context);
    
    	
    		MyFactory.verficationStatutDeLaBDD(context, WidgetSimple.ID);//vérifie si la table des proverbes existe et si elle contient des proverbes 
    
    
    	}
    
    	/* Fonction appelée à la suppression de la derniere instance du widget simple*/ 
    	@Override
    	public void onDisabled(Context context) {
    		// TODO Auto-generated method stub
    
    		proverbeAfficheDansLeWidget = context.getResources().getString(R.string.load);
    		
    		Log.w("TEXTE AVANT SUPPRESSSION", proverbeAfficheDansLeWidget);
    		
    		Intent mIntentArretAlarm = new Intent(ACTION_ARRIVEE_DUN_NOUVEAU_PROVERBE_WIDGET_SIMPLE);
    		PendingIntent mPendingIntentArretAlarm  = PendingIntent.getBroadcast(context, 0, mIntentArretAlarm, 0);
    		alarmApplication.cancel(mPendingIntentArretAlarm );//on arrête l'alarme
    	
    		super.onDisabled(context);
    		
    		
    	}
    
    	/*  Fonction appelée à chaque suppression d'une instance du widget simple sur le bureau*/ 
    	@Override
    	public void onDeleted(Context context, int[] appWidgetIds) {
    		// TODO Auto-generated method stub
    		super.onDeleted(context, appWidgetIds);
    	}
    
    
    
    
    /* Fonction appelée à la réception d'une action */ 
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		// TODO Auto-generated method stub
    
    		/* Recupération des préférences */
    		preferencesUtilisateur = PreferenceManager.getDefaultSharedPreferences(context);
    		myContext = context;	
    		/* Atrribution de l'ecouteur de changement de preference */
    		preferencesUtilisateur.registerOnSharedPreferenceChangeListener(myPreferenceChangeListener);
    
    		if(intent.getAction().equals(WidgetSimple.ACTION_TABLE_PROVERBE_NON_VIDE_WIDGET_SIMPLE))//si la table n'est pas vide alors on lance le service de recupération de la liste des proverbes
    		{
    			Log.w("WIDGET_SIMPLE", "BroadCast TABLE proverbe non Vide recu");
    			Intent myIntent = new Intent(context, S_RecuperationListProverbAAfficherDansWidget.class);
    			
    			/* on fourni l'ID de l'auteur de la demande(de recupération de la liste) 
    			 * au service de recupération de la liste des proverbes afin qu'on puisse lui(auteur de la demande) envoyé la liste récupérée
    			 * à la fin de la récupération 
    			 */
    			myIntent.putExtra(MyFactory.ID_WIDGET_AUTEUR_DEMANDE_VERIFICATION, WidgetSimple.ID);
    			context.startService(myIntent);//ce service effectuera la recuperation de la liste en background pour réduire la consommation inutile des ressources
    		}
    		
    		if(intent.getAction().equals(ACTION_LISTE_PROVERBE_ENVOYEE_WIDGET_SIMPLE))
    		{
    			Log.w(" WIDGET_SIMPLE S. Recuperation ListeProverbe", "Liste des Proverbes Recue");
    			listeDesProverbes = intent.getParcelableArrayListExtra(LISTE_PROVERBES);
    			tailleListe = intent.getParcelableArrayListExtra(LISTE_PROVERBES).size();
    
    		/*
    		 	for(Proverbe i :listeDesProverbes)
    		 
    			{
    				Log.v("WIDGET_SIMPLE proverbe", "id : "+String.valueOf(i.getId())+ "Prov :"+i.getFormule()+"\n");
    			}
    
    		*/
    			alarmApplication =  (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);//initialisation de l'alarme
    			Intent mIntent = new Intent(ACTION_ARRIVEE_DUN_NOUVEAU_PROVERBE_WIDGET_SIMPLE);
    
    			PendingIntent mPendingIntent = PendingIntent.getBroadcast(context, 0, mIntent, 0);
    
    
    			/* On récupère les préférences utilisateur */
    			SharedPreferences unePreference = PreferenceManager.getDefaultSharedPreferences(context);
    			String PrefernceTempsChoisie = unePreference.getString(id_TempsDefilement, "-1");
    
    			/*par defaut la periode de defilement des proverbes est de 15 minutes i.e 900 000 milisecondes
    			 * 1 seconde = 1 000 milisecondes
    			 * 1 minute = 60 secondes = 60 000 milisecondes 
    			 * 1 heure = 3 600 secondes = 3 600 000 milisecondes
    			 */
    
    			if(PrefernceTempsChoisie.equals("-1"))//cas ou l'utilisateur n'a pas spécifié de temps/période de defilement(aucune préférence choisie)
    			{
    				Log.w("WIDGET_SIMPLE Prefrence", "Aucune");
    				//on cast le temps vue qu'il a été stocké comme une chaine de caractères au niveau des ressources
    				PeriodeDefilementProverbe = 900000;//temps par défaut i.e 15 minutes( 900 000 milisecondes )
    
    				//PeriodeDefilementProverbe = 4000;
    			}
    
    			else //cas ou l'utilisateur spécifie un(e) temps/période de defilement (une préférence a été choisie)
    			{
    				Log.w("WIDGET_SIMPLE Prefrence", PrefernceTempsChoisie);
    				//on cast le temps vue qu'il a été stocké comme une chaine de caractères au niveau des ressources
    				PeriodeDefilementProverbe = (long)Long.valueOf(PrefernceTempsChoisie);
    
    
    			}
    
    			alarmApplication.setRepeating(AlarmManager.RTC, 2000, PeriodeDefilementProverbe, mPendingIntent);
    
    			Log.w("WIDGET_SIMPLE INFOS", "Nouveau proverbe lancé");
    
    
    		}
    
    		if(intent.getAction().equals(ACTION_ARRIVEE_DUN_NOUVEAU_PROVERBE_WIDGET_SIMPLE))
    		{
    			//
    		//	miseAJourWidgets(context);/***************************************/
    			Log.w("WIDGET_SIMPLE INFOS", "Nouveau proverbe recue");
    			Log.v("WIDGET_SIMPLE INFOS", "taille liste = "+String.valueOf(tailleListe));
    
    
    			int x = 0+(int)(Math.random()*tailleListe);//generer un nbre aléatoire compris entre 0 et la taille de la liste des proverbes
    			Log.w("WIDGET_SIMPLE INFOS", "Nbre Aleatoire X = "+String.valueOf(x));
    
    
    			Proverbe proverbeAleatoire = listeDesProverbes.get(x);//recuperer le proverbe se trouvant au rang nbreAleatoire dans la liste des proverbes
    			Log.w("WIDGET_SIMPLE INFOS", "Proverbe Aleatoire :"+ proverbeAleatoire.getFormule());
    
    			proverbeAfficheDansLeWidget = proverbeAleatoire.getFormule();//texte à afficher actuellement
    			explicationProverbeAfficheDansLeWidget = proverbeAleatoire.getExplication();
    
    			Log.v("WIDGET_SIMPLE AFFECTATION", "texte du PROVERBE affecté a la variable Statique");
    			Intent mIntent = new Intent(context, S_MAJPeriodiqTextAfficherWidgetSimple.class);
    			mIntent.putExtra(TEXTE_DU_PROVERBE_A_AFFICHER_DANS_LE_WIDGET, proverbeAleatoire.getFormule());//on encapsule le texte du proverbe dans un intent puis on l'envoi au service charger de l'afficher dans le(s) widget(s)
    			mIntent.putExtra(TEXTE_EXPLICATION_DU_PROVERBE_A_AFFICHER_DANS_LE_WIDGET, proverbeAleatoire.getExplication());//on encapsule le texte du proverbe dans un intent puis on l'envoi au service charger de l'afficher dans le(s) widget(s)
    
    			context.startService(mIntent);
    
    		}
    
    		if(intent.getAction().equals(ACTION_DEMARER_ACTIVITE_PROVERBE_EXPLICATION))
    		{
    			/* Recuperation du proverbe et de l'explication à afficher dans l'activité */
    			Log.w("ACTIVITE WIDGET_SIMPLE", "Intent de demarrage de l'ativite reçu");
    
    			Intent myIntent = new Intent(context, A_ProverbeEtExplicationWidgetSimple.class);
    			myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
    			if( (proverbeAfficheDansLeWidget !=null)&&(explicationProverbeAfficheDansLeWidget != null) )
    			{
    
    				myIntent.putExtra(PROVERBE_AFFICHER_DANS_L_ACTIVITE, proverbeAfficheDansLeWidget);
    				myIntent.putExtra(EXPLICATION_AFFICHER_DANS_L_ACTIVITE, explicationProverbeAfficheDansLeWidget);
    
    				Log.v("ACTIVITE WIDGET_SIMPLE", "Proverbe + Explication envoyés a l'activité avec succès");
    			}
    
    			context.startActivity(myIntent);
    //			Log.w("ACTIVITE", "Activité proverbe + application lancée");
    
    		}
    
    		super.onReceive(context, intent);
    
    
    
    	}
    	
    	
    		
    
    		
    
    
    }
    


    Le fichier Manifest :



    <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ig.proverbwid" android:versionCode="1" android:versionName="1.0" android:installLocation="internalOnly" >
        <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />
        <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
            <activity android:name="com.ig.proverbwid.activites.A_ProverbeEtExplicationWidgetSimple" android:label="@string/NomApplication" />
            <activity android:name="com.ig.proverbwid.activites.A_ProverbeEtExplicationWidgetMoyen" android:label="@string/NomApplication" />
            <activity android:name="com.ig.proverbwid.activites.A_PreferencesUtilisateur" />
            <receiver android:name="com.ig.proverbwid.widgets.WidgetSimple" android:label="ProverbWid(4x1)" >
                <intent-filter >
                    <action android:name="com.ig.proverbwid.intent.action.TABLE_PROVERBE_NON_VIDE_WIDGET_SIMPLE"/>
                </intent-filter>
                <intent-filter >
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
                </intent-filter>
                <intent-filter>
                    <action android:name="com.ig.proverbwid.intent.action.LISTE_PROVERBE_ENVOYEE_WIDGET_SIMPLE"/>
                </intent-filter>   
                <intent-filter >
                    <action android:name="com.ig.proverbwid.intent.action.ARRIVEE_DUN_NOUVEAU_PROVERBE_WIDGET_SIMPLE"/>
                </intent-filter>
                <intent-filter >
                    <action android:name="com.ig.proverbwid.intent.action.DEMARER_ACTIVITE_PROVERBE_EXPLICATION"/>
                </intent-filter>
                <meta-data android:name="android.appwidget.provider" android:resource="@xml/my_wiget_provider_config"/>
            </receiver>
           
            <service android:name="com.ig.proverbwid.services.S_MAJPeriodiqTextAffichesWidgetMoyen" android:enabled="true" android:exported="false"/>
            <service android:name="com.ig.proverbwid.services.S_MAJWidgetsMoyen" android:enabled="true"  android:exported="false"/>
            <service android:name="com.ig.proverbwid.services.S_MAJWidgetsSimple" android:enabled="true" android:exported="false"/>
            <service android:name="com.ig.proverbwid.services.S_CreationRemplissageTableProverbe" android:enabled="true" android:exported="false"/>
            <service android:name="com.ig.proverbwid.services.S_RecuperationListProverbAAfficherDansWidget" android:enabled="true" android:exported="false"/>
            <service android:name="com.ig.proverbwid.services.S_MAJPeriodiqTextAfficherWidgetSimple" android:enabled="true" android:exported="false"/>
        </application>
    
    </manifest>
    



    J'ignore jusqu'à présent la source de ce problème.Est ce que vous avez une idée de ce qui peut-être à l'origine de cela?

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter

    [Android]

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown