Правильный способ обработки (ожидающих) намерений в AppWidgets - PullRequest
0 голосов
/ 18 августа 2011

У меня есть вопрос, касающийся обработки намерений AppWidget.У меня есть виджет, который можно щелкнуть, и при нажатии я хочу отправить намерение самому AppWidgetProvider для дальнейшей обработки.

Проблема: изначально я получаю намерения в onReceive (), но через некоторое время (не знаю, что его вызывает) функция onReceive () больше не вызывается.

У меня есть следующий код, все в MyWidgetProvider расширяет AppWidgetProvider.

a) зарегистрироваться для приема трансляций:

in onEnabled(...):
  context.getApplicationContext().registerReceiver(this, new IntentFilter(MY_ACTION));

b) установить намерение быть запущенным при нажатии:

in onUpdate(...)
  Intent intent= new Intent(MY_ACTION);
  PendingIntent pendingIntent= PendingIntent.getBroadcast(context, 0/*notusedanyway*/, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  views.setOnClickPendingIntent(R.id.widget_root, pendingIntent);

в) реагировать на события и что-то делать:

in onReceive(...)
  if (MY_ACTION.equals(intent.getAction())
    doSomething();

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

Я совершенно озадачен, почему этоэто тот случай.Может кто-нибудь указать мне правильный способ сделать это?

Спасибо!

Том

1 Ответ

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

Вы должны использовать BroadcastReceiver, зарегистрированный в вашем файле AndroidManifest.xml.Когда вы регистрируете его в onEnable, он привязывается к процессу.Всякий раз, когда Android убивает ваш процесс (например, при получении телефонного звонка), ваш приемник больше не существует и (как вы заметили) больше не работает.

...