0

我有一个关于 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);

c) 对事件做出反应并做某事:

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

当我部署 + 添加一个小部件时,它工作正常。然而,过了一会儿——不确定究竟是什么导致了问题,但例如一个电话似乎会影响它——我不再在 onReceive() 中收到任何通知。

我完全被难住了为什么会这样。有人可以向我指出这样做的正确方法吗?

谢谢!

汤姆

4

1 回答 1

1

您应该使用在 AndroidManifest.xml 文件中注册的 BroadcastReceiver。当您在 onEnable 中注册它时,它与进程相关联。每当 Android 终止您的进程时(例如,接到电话时),您的接收器就不再存在并且(如您所见)不再工作。

于 2011-08-18T18:54:47.130 回答