PendingIntents не срабатывает после попытки добавить второй виджет на главный экран

У меня есть widget, который устанавливает число pendingIntents. Все отлично работает с виджетом, пока у меня есть только один виджет на главном экране.

На данный момент я решил, что собираюсь ограничить пользователя только одним из моих виджетов на главном экране. Если один из них уже используется, ConfigureActivity предоставляет пользователю диалоговое окно предупреждения о том, что он не может добавить второй, а затем устанавливает setResult(RESULT_CANCELED, null) и затем finish().

Это работает просто отлично и не позволяет пользователю настраивать какие-либо дополнительные виджеты на главном экране, но для того, который уже установлен, большая часть моих pendingIntents не сработает. Logcat сообщает мне: "Невозможно отправить ожидающее намерение:"

Каждый из pendingIntents настроен на запуск службы, которая используется для обновления виджета. Если я удалю виджет и перезагрузлю его, он снова будет работать нормально, пока я не попытаюсь добавить второй виджет. На данный момент это немного сбивает меня с толку. У кого-нибудь есть идеи относительно того, почему начало добавления 2-го виджета, но не его завершение, отменит мои предыдущие ожидающие намерения?

В случае, если это имеет значение, pendingIntents, где настроено значение FLAG_CANCEL_CURRENT.

Вот код, используемый для установки моих intent и pendingIntents.

Intent intentDialog = new Intent(getBaseContext(), ScheduleActionsActivity.class);
intentDialog.putExtra("Action", ACTION_ENTER_SCHEDULE);  
intentDialog.setAction("abc.hwRowOne");  
intentDialog.putExtra("scheduleId", sch.getId());  
intentDialog.putExtra("scheduleDescription", sch.getDescription());  
PendingIntent pendingIntentDialog1 = PendingIntent.getActivity(getBaseContext(), 0, intentDialog, PendingIntent.FLAG_CANCEL_CURRENT);  
views.setOnClickPendingIntent(R.id.hwRowOne, pendingIntentDialog1);  

Строка, в которой intentDialog.setAction() изменяется, становится уникальной для каждой строки виджета, поэтому я подумал, что это также делает мой pendingIntent уникальным.

Я видел этот ответ прошлой ночью после публикации моего вопроса, но я не уверен, почему и как он работает, и я не уверен, где его разместить в моем районе. Кажется, он устанавливает уникальные данные для каждого намерения, но я думал, что это то, что делал мой .setAction(). Несколько экземпляров виджета с обновлением только последнего виджета

Итак, чтобы ответить на ваш вопрос, нет, я вообще не использую appWidgetId в своих намерениях, мне просто нужно передать его как putExtra(), а затем как intentDialog?


person Eric    schedule 12.07.2012    source источник
comment
Правильно ли вы использовали WidgetID, чтобы указать PendingIntent, какой виджет необходимо обновить? Всякий раз, когда у вас есть более одного виджета, чтобы обновить его из службы, вам нужно передать ему правильный идентификатор виджета.   -  person MKJParekh    schedule 12.07.2012


Ответы (1)


Ответ на этот вопрос решил мои проблемы: Несколько экземпляров виджета с последним обновлением виджет

Я понятия не имею, почему добавление setData(uri) работает, но это позволило мне теперь иметь более одного виджета на главном экране, а pendingIntents уникальны и срабатывают, как я и ожидал.

На всякий случай я также добавляю appWidgetId к intent, и он может понадобиться позже, если я решу разрешить более одного виджета на устройство.

person Eric    schedule 12.07.2012