Разъединенные Inventu AppWidget после перезапуска процесса Home - PullRequest
2 голосов
/ 08 февраля 2010

Мое Android-приложение Transdroid предлагает несколько виджетов для домашнего экрана. Каждый AppWidget имеет 2 «кнопки» (ImageButton), один запускает приложение, а другой запускает какое-то действие, которое обновляет содержимое AppWidget. Довольно просто Здесь - скриншот. Код виджета находится на моем сайте Google Code, но самое главное:

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

Проблема в том, что onUpdate виджета не вызывается после перезапуска процесса Home, и, следовательно, PendingIntents, используемый для добавления функциональности к кнопкам, теряется.

Это довольно легко воспроизвести.

  1. Запустить эмулятор
  2. Добавить виджет (который использует PendingIntent, скажем, для начала действия)
  3. Нажмите на кнопку, чтобы увидеть, как она на самом деле работает
  4. Принудительно уничтожить домашний процесс ('adb -e shell kill 96', где 96 - PID android.process.acore)
  5. Кнопка виджета больше не работает.

Точнее: нет onReceive и, следовательно, не вызывается onUpdate при перезапуске процесса Home android.process.acore Home. В свою очередь, намерение не прилагается.

Кто-нибудь испытывал такую ​​же проблему и знает, как обойти эту проблему?

1 Ответ

0 голосов
/ 26 февраля 2010

Я только что протестировал пару своих собственных виджетов, и их события кликов работают нормально после убийства Акора. Вот мой соответствующий код:

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

Основное различие, которое я вижу, это флаги, связанные с намерениями; Я бы сказал, что они определенно стоит попробовать. [Параметр layoutId в моем коде установлен иначе; этот же код используется для нескольких виджетов с разными макетами].

...