You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用未启动时接收系统广播并启动服务的实现疑问

实现Android应用未启动时接收系统广播并触发服务

核心需求

  • 希望应用未启动时能接收特定系统广播,进而启动服务执行代码
  • 已知开机时系统可向未启动的已注册应用发送广播并触发代码,确认此逻辑是否可应用到其他广播场景
  • 曾实现后台服务,但仅在应用启动时触发,应用停止后服务随即终止,疑问是否需要改用前台服务,以及如何确保应用未运行时仍能接收广播并触发代码

2023年3月22日更新:静态注册接收器未生效

需要监听应用包添加事件,已添加QUERY_ALL_PACKAGES权限及对应queries配置,清单代码如下:

....
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
    tools:ignore="QueryAllPackagesPermission" />

<queries>
    <intent>
        <action android:name="android.intent.action.MAIN" />
    </intent>
</queries>
....

<application>
....
    <receiver android:name=".receiveInstalled" android:exported="true" android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <data android:scheme="package" />
        </intent-filter>
    </receiver>
....
</application>

接收器类代码:

class receiveInstalled : BroadcastReceiver()
{
    override fun onReceive(p0: Context?, p1: Intent?)
    {
        if(Intent.ACTION_PACKAGE_ADDED == p1?.action)
        {
            val retcomponent = p0?.startService(Intent(p0, GetService2::class.java))
            Log.v("check_services", "startService " + retcomponent)

            val getname = p1?.data?.schemeSpecificPart

            Log.v("check_services", "intent received " + getname.toString())
            Log.v("check_services", "query " + p1?.data?.scheme)
        }
    }
}

动态注册接收器可正常触发,但应用关闭后失效,代码对比:

val intentFilter = IntentFilter()
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED)
intentFilter.addDataScheme("package")
registerReceiver(receiveInstalled(), intentFilter)

2023年3月22日更新(续):ADB发送广播的测试结果

  • 触发成功的命令:
am broadcast -a "android.intent.action.PACKAGE_ADDED" -n com.temp.getservice2/.receiveInstalled

Broadcasting: Intent { act=android.intent.action.PACKAGE_ADDED flg=0x400000 cmp=com.temp.getservice2/.receiveInstalled }

Broadcast completed: result=0
  • 触发失败的命令:
am broadcast -a "android.intent.action.PACKAGE_ADDED"

Broadcasting: Intent { act=android.intent.action.PACKAGE_ADDED flg=0x400000 }

Broadcast completed: result=0

内容的提问来源于stack exchange,提问作者localacct

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:55:41