【发布时间】:2011-10-04 21:07:17
【问题描述】:
我的应用程序除了 Activity 之外还有一个服务和一个应用小部件。
我希望单击小部件会导致一段代码执行,这段代码将启用/禁用应用程序的服务。 因此,单击应用小部件会启动一个挂起的意图,以这种方式构建:
Intent intent = new Intent(ACTION_ENABLE_DISABLE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
(当然,ACTION_ENABLE_DISABLE 是我定义的。)
在清单中,我在意图过滤器中指定此操作。
然后,我重写了 onReceive 方法,如果意图的操作是 ACTION_ENABLE_DISABLE,我执行启用/禁用服务的那段代码。 如果不是,我调用 super.onReceive,这样正常的应用小部件广播就会完成。
到目前为止一切顺利!小部件工作正常。
但是,假设我在应用的 PID 为 X 时创建了它。 然后,用户离开了我的活动,它们被销毁了;所以作为服务 - 假设用户关闭了它。 所以我的流程既不托管活动也不托管服务 - 它被销毁/从任务管理器中退出,这两种情况都是相关的。 下次创建它时,它具有不同的 PID,现在,单击应用小部件没有任何作用。
仍然可以手动更新应用小部件,例如,从活动中更新。但是点击它并不会导致:
- 正在发送 ACTION_ENABLE_DISABLE 广播。 或
- 我的应用小部件接收到此广播。
以下情况之一发生 - 当我查看 logcat 时,我在小部件的“onReceive”方法中使用 Log.d 记录的消息没有出现。
这是为什么呢?发送广播时是否需要指定任何特殊内容,或者清单中的接收者声明中的任何内容?
说到这里,当点击应用小部件中的视图(而不是我的方法)时,有没有更好的方法可以用来执行您自己的代码。
非常感谢!
【问题讨论】:
标签: android widget broadcastreceiver