Android API 26及以上版本如何实现应用安装后自动启动?
Android API 26+ 应用安装后自动启动实现说明
结论前置
原生Android 8.0(API26)及以上系统对隐式广播和应用自启做了严格限制,普通第三方应用无法无感知实现自身安装完成后自动启动,仅特定场景下可以实现该功能。
补充基础规则:应用自身无法接收自己被安装的
ACTION_PACKAGE_ADDED系统广播,该广播只会发送给系统中已经安装完成的其他应用,所以应用无法靠自身监听广播触发自启。
可实现的场景及操作方案
场景1:你是安装器应用,要启动你刚刚安装的其他应用
该场景是官方允许的合规场景,不需要申请特殊权限,通过安装结果回调即可实现:
- 构造安装APK的Intent,注意API24及以上需要通过
FileProvider获取APK文件的Uri:
// Kotlin 示例代码 val apkFile = File("你的APK文件路径") val apkUri = FileProvider.getUriForFile( this, "${packageName}.fileprovider", apkFile ) val installIntent = Intent(Intent.ACTION_VIEW).apply { setDataAndType(apkUri, "application/vnd.android.package-archive") addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) }
- 使用Activity Result API监听安装结果,安装成功后启动目标应用:
val installLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == Activity.RESULT_OK) { // 安装成功,获取目标应用的启动Intent val targetPkgName = "你安装的应用包名" val launchIntent = packageManager.getLaunchIntentForPackage(targetPkgName) launchIntent?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) launchIntent?.let { startActivity(it) } } } // 调用安装流程 installLauncher.launch(installIntent)
场景2:你的应用拥有系统签名/是系统预制应用
该场景下可以申请特殊权限,监听系统的ACTION_PACKAGE_ADDED广播触发启动:
- 在
AndroidManifest.xml中静态注册广播接收器:
<receiver android:name=".InstallEventReceiver" android:exported="true" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED" /> <data android:scheme="package" /> </intent-filter> </receiver>
- 实现广播接收器逻辑,匹配到目标应用包名后启动:
public class InstallEventReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())) { String installedPkg = intent.getData().getSchemeSpecificPart(); // 匹配你要启动的应用包名 if ("目标应用包名".equals(installedPkg)) { Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(installedPkg); if (launchIntent != null) { launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(launchIntent); } } } } }
场景3:普通第三方应用想要实现自身安装后自启
该场景原生系统不支持,仅部分国内定制ROM提供了相关权限入口:
- 你可以引导用户手动到系统设置中开启「允许应用安装后自启」的权限,不同ROM的权限位置不同,需针对厂商做适配
- 最合规的方案是在安装完成后的系统引导页,提示用户手动点击「打开」按钮启动应用,适配所有系统版本,不需要额外权限
注意事项
- 不要尝试用黑科技绕过系统权限限制,这类方案兼容性差,后续系统版本大概率会被封堵,还可能导致应用被应用市场下架
- 谷歌官方不推荐普通应用实现安装后自动启动的行为,会影响用户体验,非必要场景不建议实现该功能
内容的提问来源于stack exchange,提问作者Andrew07
相关产品推荐
相关产品推荐

