Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AppWidgets中处理(挂起)意图的正确方法_Android_Android Intent_Android Appwidget_Android Pendingintent - Fatal编程技术网

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

Android AppWidgets中处理(挂起)意图的正确方法,android,android-intent,android-appwidget,android-pendingintent,Android,Android Intent,Android Appwidget,Android Pendingintent,我有一个关于AppWidget意图处理的问题。我有一个可点击的小部件,点击后我想向AppWidgetProvider本身发送一个意向,以便进一步处理 问题:我最初在onReceive()中接收到意图,但过了一段时间(不确定是什么原因),onReceive()不再被调用。 我有以下代码,全部在MyWidgetProvider中扩展了AppWidgetProvider a) 登记接收广播: in onEnabled(...): context.getApplicationContext().re

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

我完全搞不懂为什么会这样。有人能告诉我做这件事的正确方法吗

谢谢


Tom

您应该使用在AndroidManifest.xml文件中注册的BroadcastReceiver。当您在onEnable中注册它时,它将绑定到流程。每当Android终止您的进程时(例如,当接到电话时),您的接收器就不再存在,并且(正如您所观察到的)不再工作。

谢谢,这就解决了问题。我做了一些日志记录,事实上我的提供者在启动时已经实例化了三次,但OneEnabled只调用了一次。这是一个很大的提示,指向“不要依赖任何实例注册码…”;)