Frage

Meine Android App Transdroid bietet mehrere Startbildschirm Widgets. Jeder AppWidget hat 2 ‚Tasten‘ (Image), startet man die App und man beginnt, eine Aktivität, die den AppWidget Inhalt aktualisiert wird. Ziemlich einfach. Hier ist ein Screenshot. Der Widget-Code ist an meiner Google Code-Website, aber am wichtigsten ist:

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);

Das Problem ist: das onUpdate des Widgets nicht nach dem Start Prozess wird neu gestartet genannt wird, und damit die verwendeten PendingIntents auf die Tasten befestigen Funktionalität verloren

.

Es ist ziemlich einfach zu reproduzieren.

  1. Starten Sie einen Emulator
  2. Fügen Sie ein Widget (das verwendet eine PendingIntent, sagen wir, eine Aktivität starten)
  3. Klicken Sie auf die Schaltfläche, um zu sehen es tatsächlich funktioniert
  4. Kraft, die zu Hause Vorarb töten ( 'adb-shell 96 töten', wobei 96 die PID von android.process.acore sind)
  5. Die Schaltfläche Widget funktioniert nicht mehr.

Präziser: keine OnReceive und somit kein onUpdate aufgerufen, wenn der android.process.acore Heim Prozess neu gestartet wird. Im Gegenzug ist keine Absicht angebracht ist.

Jeder erlebte das gleiche Problem und weiß, wie dieses Problem zu umgehen?

War es hilfreich?

Lösung

Ich habe getestet nur ein paar meiner eigenen appwidgets und ihre Click-Ereignisse funktionieren nach acore töten. Hier ist mein entsprechender Code:

    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));

Der große Unterschied, den ich sehen kann, ist die Absicht bezogenen Fahnen; Ich würde sagen, dass sie auf jeden Fall wert sind, die versuchen. [Der layoutId Parameter in meinem Code ist elsewere gesetzt; Dieser gleiche Code für mehrere Widgets mit verschiedenen Layouts verwendet].

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top