OnClick PendingIntent в виджете иногда не работает - PullRequest
3 голосов
/ 19 июля 2011

У меня есть виджет и 4 кнопки на нем. Кнопки на самом деле являются ярлыками для других приложений. Я установил намерение onClick для каждой кнопки с этим кодом:

Intent i = context.getPackageManager().getLaunchIntentForPackage(s);                    
PendingIntent pi = PendingIntent.getActivity(context, 0, i, Intent.FLAG_ACTIVITY_NEW_TASK);
remoteViews.setOnClickPendingIntent(curIconId, pi);

Обычно это работает нормально, но иногда ничего не делает, и в logcat я вижу исключение SendIntentException с сообщением «Не удается отправить ожидающее намерение».

Если я обновлю виджет (то есть снова установлю ожидающее намерение), он снова будет работать нормально.

Есть идеи, почему оно иногда ломается?

Спасибо

Ответы [ 4 ]

5 голосов
/ 19 июля 2011

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

Вот ссылка, которая указала мне на это http://www.androiddiscuss.com/1-android-discuss/95040.html

2 голосов
/ 19 января 2012

Проблема заключалась в том, что я отправил слишком много данных в удаленные представления (в моем случае, слишком много значков). Таким образом, обновление фактически не удалось. Размер отправляемого файла ограничен, не помню, где я его читал.

В моем случае решение состояло в том, чтобы обновить изображения URL-адресами ресурсов вместо реальных изображений.

1 голос
/ 10 августа 2011

Боюсь, что не могу ответить вам - у меня такое же поведение на одном телефоне коллеги (Motorola), но не на других телефонах.

I могу указать,тем не менее, ваш PendingIntent.getActivity() flags параметр неверен: Intent.FLAG_ACTIVITY_NEW_TASK должен продолжаться Intent i.Для вызова getActivity() требуется один из FLAG_ONE_SHOT, FLAG_NO_CREATE, FLAG_CANCEL_CURRENT, FLAG_UPDATE_CURRENT или один из флагов Intent.FILL_IN_.

Я также могу упомянуть, что мои щелчки иногда терпели неудачу, пока яб PendingIntent.FLAG_CANCEL_CURRENT.Возможно, поэтому добавление «уникальных данных» помогает.

0 голосов
/ 25 февраля 2013

У меня была такая же проблема: Виджет не работал после поворота. Проблема в моем виджете была в том, что я переопределил метод onReceive и коснулся представления, чтобы увеличить текстовое значение. Я решил проблему с дублированием setOnClickPendingIntent в onUpdate, либо в onReceive.

...