My 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, используемые для прикрепления функциональности к кнопкам, теряются.
Это довольно легко воспроизвести.
Точнее: noReceive и, следовательно, onUpdate не вызывается, когда перезагружается процесс android.process.acore Home. В свою очередь, никакого намерения не прилагается.
Кто-нибудь испытал ту же проблему и знает, как обойти эту проблему?
Я только что проверил пару своих собственных приложений, и их события кликов работают нормально после убийства 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
в моем коде установлен elsewere; этот же код используется для нескольких виджетов с разными макетами].