Domanda

Il mio Android Transdroid offre diversi widget della schermata iniziale. Ogni AppWidget ha 2 'pulsanti' (ImageButton), si inizia l'applicazione e si inizia a qualche attività che rinfresca il contenuto AppWidget. Abbastanza semplice. Qui è uno screenshot. Il codice del widget è al mio sito web Google Code, ma la cosa più importante:

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

Il problema è: il widget di onUpdate non è chiamato dopo il processo iniziale viene riavviato, e quindi alle PendingIntents utilizzati per fissare la funzionalità ai pulsanti si perde

.

E 'abbastanza facile da riprodurre.

  1. Avvia un emulatore
  2. Aggiungi un widget (che utilizza un PendingIntent, per esempio, avviare un'attività)
  3. Fare clic sul pulsante per vedere effettivamente funziona
  4. Forza uccidere i proces casa ( 'shell -e adb uccidere 96', dove 96 è il PID del android.process.acore)
  5. Il pulsante del widget non funziona più.

Più preciso: nessuna OnReceive e quindi non onUpdate viene chiamato quando il processo iniziale android.process.acore viene riavviato. A sua volta, alcun intento è collegato.

Chiunque ha sperimentato lo stesso problema e sa come aggirare questo problema?

È stato utile?

Soluzione

Ho appena provato un paio di miei appwidgets, ed i loro eventi click funzionano bene dopo aver ucciso ACORE. Ecco il mio codice rilevante:

    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 differenza principale che posso vedere è le bandiere intenti legati; Direi che sono sicuramente la pena di provare. [Il parametro layoutId nel mio codice è impostato aspettar; questo stesso codice viene utilizzato per diversi widget con diversi layout].

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top