2

我有一个广播接收器,它将启动一个意图服务以在单独的线程上做一些工作。

我尝试深入研究意图文档以找到一种方法来获取用于创建意图的上下文:

Intent(Context packageContext, Class<?> cls)

但是 on start 命令的签名如下,并且不允许您访问传递的上下文。我没有将获取上下文视为意图的公共方法,但我可能错过了一些东西。

public int onStartCommand(Intent intent, int flag, int startId)

有没有一种方法可以获取用于创建意图的上下文,而无需将第二次广播的路由返回接收器以访问 UI 或处理程序。

4

1 回答 1

1

我尝试深入研究意图文档以找到一种方法来获取用于创建意图的上下文

由于这Context可能不在您的过程中,因此这是不可能的。此外,这不是必需的。

有没有一种方法可以获取用于创建意图的上下文,而无需将第二个广播的路由返回接收器以访问 UI

BroadcastReceiver无法更新 UI 。因此,即使你想要的东西是可能的(它不是),它对你没有好处。

此外,由于您正在启动IntentService,因此您可能没有UI。用户可以控制他们的手机,因此非常欢迎他们离开您的应用程序并转到主屏幕或其他应用程序。

处理此问题的一种模式是从IntentService. 让活动为该广播实现高优先级BroadcastReceiver,并在清单中注册一个正常优先级的接收器。后者会引发 a Notification,因此如果您的活动不在前台,则用户将看到它Notification。这是一篇更详细的博客文章,这里是一个演示此技术的示例应用程序。

于 2012-06-04T14:29:19.833 回答