【问题标题】:Correct way of handling (pending) intents in AppWidgets在 AppWidgets 中处理(待处理)意图的正确方法
【发布时间】:2011-08-18 18:31:03
【问题描述】:

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

我完全不明白为什么会这样。有人可以向我指出这样做的正确方法吗?

谢谢!

汤姆

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢,解决了。我做了一些日志记录,实际上我的提供程序在启动时已经实例化了三次,但是 onEnabled 只调用了一次。这是对“不要依赖任何实例注册码......”方向的一个重要提示;)
    猜你喜欢
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2011-02-28
    相关资源
    最近更新 更多