Question

My Android app Transdroid offre plusieurs widgets écran d'accueil. Chaque « boutons » AppWidget a 2 (ImageButton), on commence l'application et on commence une activité qui rafraîchit le contenu AppWidget. Assez simple. est une capture d'écran. Le code widget est sur mon site Google Code, mais le plus important:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_15);
views.setOnClickPendingIntent(R.id.widget_action, PendingIntent.getActivity(context, 0, new Intent(context, Transdroid.class), 0));
appWidgetManager.updateAppWidget(id, views);

Le problème est: n'est pas appelé onUpdate du widget après le processus d'accueil est redémarré, et donc les PendingIntents utilisés pour attacher des fonctionnalités aux boutons est perdu

.

Il est assez facile à reproduire.

  1. Lancer un émulateur
  2. Ajouter un widget (qui utilise un PendingIntent, disons, démarrer une activité)
  3. Cliquez sur le bouton pour voir cela fonctionne réellement
  4. Forcez les procès- maison ( 'adb shell -e tuer 96' où 96 est le PID de android.process.acore)
  5. Le bouton du widget ne fonctionne pas plus.

Plus précis: pas OnReceive et donc pas onUpdate est appelée lorsque le processus android.process.acore Home est redémarré. À son tour, aucune intention est jointe.

Toute personne a connu le même problème et sait comment contourner ce problème?

Était-ce utile?

La solution

Je viens de tester deux ou trois de mes propres appwidgets, et leurs événements de clic fonctionnent très bien après avoir tué acore. Voici mon code correspondant:

    final RemoteViews views = new RemoteViews(context.getPackageName(), layoutId);
    views.setOnClickPendingIntent(R.id.widget_view, PendingIntent.getActivity(
            context, 
            0, 
            new Intent(context, MyActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), 
            PendingIntent.FLAG_UPDATE_CURRENT));

La principale différence que je peux voir les drapeaux est lié intention; Je dirais qu'ils sont certainement la peine d'essayer. [Le paramètre layoutId dans mon code est elsewere; ce même code est utilisé pour plusieurs widgets avec différentes mises en page].

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top