Разъединенные намерения AppWidget после перезапуска домашнего процесса

StackOverflow https://stackoverflow.com/questions/2221005

Вопрос

Мое 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 виджета не вызывается после перезапуска начального процесса, и, следовательно, PendingIntents, используемые для прикрепления функциональности к кнопкам, теряются.

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

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

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

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

Это было полезно?

Решение

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

    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 параметр в моем коде задан в другом месте;этот же код используется для нескольких виджетов с разными макетами].

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top