Поскольку у вас нет более подробной информации (возможно, некоторый исходный код о том, как зарегистрировать получателя и как вы связываете ожидаемое намерение). Возможно, ваш телефон представляет собой модель с выдвижной клавиатурой, или домашний экран может изменить ориентацию. Потому что при изменении ориентации экрана домашнего экрана (или любой конфигурации оборудования) домашний экран раздувается и воссоздается. Итак, для ваших кнопок, намерение, которое изначально было связано с ним, исчезло после воссоздания. Согласно документации (извините, не могу найти ссылку), инфлятор получает только последнее обновление из удаленных представлений. Таким образом, следующее не будет работать:
RemoteViews rv = ...;
// Assign the button to some pending intent
rv.setOnClickPendingIntent(View, pi);
AppWidgetManager.Update(...);
// And after sometime, you make changes to the rv
rv.setFloat();
// And update again
AppWidgetManager.Update(...);
Это все в порядке, и кнопка будет запускать ожидающее намерение, как и ожидалось, но, если по какой-либо причине конфигурация изменилась и домашний экран стал недействительным (и воссоздан), appwidgetmanager будет обновляться только в соответствии с last обновление, в котором ничего не указано о намерении нажатия.
Решение этой проблемы заключается в том, что каждый раз, когда вы обновляете удаленное представление, вы также должны установить все ожидающие намерения. Я не уверен, как это повлияет на производительность, но это единственный метод работы, который я могу использовать. (но мой виджет обновляется примерно 16 раз в секунду и, по крайней мере, работает:)