该应用程序有一个BroadcastReceiver,用于侦听启动完成事件并启动后台服务以将一些数据发送到我的HTTP服务器。
我的问题是,如果应用程序从未由用户运行(仅安装),则BroadcastReceiver是否会收到启动事件?
答案 0 :(得分:4)
从android 3.1开始,用户必须启动一次应用程序才能接收boot_complete广播..
以下是来自官方的javadoc:
从Android 3.1开始,系统的包管理器会跟踪 处于停止状态的应用程序并提供了一种方法 从后台进程和其他进程控制它们的启动 应用
请注意,应用程序的停止状态与a不同 活动停止状态。系统管理这两个停止的状态 分开。
平台定义了两个让发件人指定的新意图标志 是否应该允许Intent激活已停止的组件 应用
FLAG_INCLUDE_STOPPED_PACKAGES - 包含已停止的意图过滤器 在要解决的潜在目标列表中的应用程序。 FLAG_EXCLUDE_STOPPED_PACKAGES - 排除已停止的意图过滤器 潜在目标清单中的申请。当两者都没有时 这些标志是在intent中定义的,默认行为是 包括潜在列表中已停止应用程序的过滤器 目标
请注意,系统会向所有人添加FLAG_EXCLUDE_STOPPED_PACKAGES 广播意图。这样做是为了防止来自后台的广播 来自无意或不必要的组件的服务 停止应用程序。后台服务或应用程序可以 通过添加FLAG_INCLUDE_STOPPED_PACKAGES来覆盖此行为 用于广播应该被允许激活停止的意图的标志 应用
应用程序在首次安装时处于停止状态但是 尚未启动以及何时由用户手动停止 (在管理应用程序中)。
查看this blog了解更多详情
答案 1 :(得分:1)
是的,引导接收器已注册以侦听引导,因此如果您重新启动设备,它将触发,无论您是否启动了应用程序。同样,如果您向清单添加NFC侦听器,那么如果有人刷NFC卡,应用程序将做出反应。 Android使用Manifest来响应您在其中指定的任何内容。这不取决于应用程序是否正在运行(或已经运行)。 但是很好的问题! :)
根据其他答案和文档,编辑。这不再适用。对不起,感到困惑。