WidgetProvider Назначения, отправленные с нажатием кнопки, не найдены в onReceive - PullRequest
4 голосов
/ 17 февраля 2011

Я пытаюсь определить, когда нажимается кнопка виджета, но в методе onReceive не отображаются никакие дополнительные элементы Intent.

onReceive вызывается при каждом нажатии, но ни один из моих *Появляется 1006 * дополнительных сообщений.

Мой код указан ниже: Я только подключаю тумблер при обновлении, поэтому не уверен, что это правильно.Ни одна из дополнительных функций не отображается, и категории null, даже если я установил это.

onUpdate (контекстный контекст и т. Д.):

RemoteViews remoteViews = new RemoteViews(context.getPackageName(), 
                                R.layout.my_widget);

Intent buttonIntent = new Intent(context, MyWidgetProviderClass.class);
buttonIntent.setAction(ACTION_WIDGET_RECEIVER);
buttonIntent.putExtra("BUTTON_CLICKED", "buttonClick");
buttonIntent.putExtra("BUTTON",899);

PendingIntent muPendingIntent = PendingIntent.getBroadcast(context, 0, 
                                        buttonIntent, 
                                        PendingIntent.FLAG_CANCEL_CURRENT);
buttonIntent.addCategory("buttonclick");
remoteViews.setOnClickPendingIntent(R.id.ToggleImageButton, myPendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);

onReceive():

intent.getIntExtra("BUTTON",-1);    ---> 1
intent.getCategories()   --- > null

Ответы [ 3 ]

5 голосов
/ 17 февраля 2011

Попробуйте FLAG_UPDATE_CURRENT вместо FLAG_CANCEL_CURRENT.

Кроме того, ваш код может содержать опечатку: у вас есть muPendingIntent вместо myPendingIntent.

Также, пожалуйста, сделайтене использовать buttonclick в качестве категории.Пожалуйста, укажите пространство имен (например, com.something.whatever.buttonclick) или удалите его, поскольку я не уверен, зачем вам это нужно.

Вот пример проекта , демонстрирующий виджет приложения, который нащелчок запускает само обновление, с дополнительным (используется для предоставления идентификаторов виджетов приложения).

1 голос
/ 17 февраля 2011

Android, очевидно, не любит повторное использование имени ACTION_WIDGET_RECEIVER и удаляет эти параметры.Создан другой ДЕЙСТВИЕ только для кнопки переключения, зарегистрирован в манифесте, и теперь параметры отображаются.

0 голосов
/ 11 октября 2014

Я обнаружил, что если в намерении, которое использовалось для создания отложенного намерения, уже были какие-либо дополнения, то дополнения нового намерения игнорируются.Например, если вы будете следовать примеру в документации для Android для создания виджета, например,

Intent toastIntent = new Intent(context, StackWidgetProvider.class);
toastIntent.setAction(StackWidgetProvider.TOAST_ACTION);
toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent toastPendingIntent = PendingIntent.getBroadcast(context, 0, toastIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
rv.setPendingIntentTemplate(R.id.stack_view, toastPendingIntent);

, тогда строка

toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);

будет препятствовать прикреплению дополнений вашего нового намерения.Я удалил эту строку, и мое новое намерение сработало.

...