在AppWidgets中正确处理(挂起)意图的方法

时间:2011-08-18 18:31:04

标签: android android-intent android-appwidget android-pendingintent

我有一个关于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()中收到任何通知。

我完全不知道为什么会这样。有人能指出我这样做的正确方法吗?

谢谢!

汤姆

1 个答案:

答案 0 :(得分:1)

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