Android Launcher更新后存在启动间隔 如何实现更新后自动唤起自定义Launcher
自定义Launcher升级后自动激活解决方案
根因说明
- 自定义Launcher升级安装过程中,旧版本进程会被系统强制杀死,刚安装完成的新版本无主动启动逻辑时,系统会临时兜底跳转至系统默认桌面
- 由于你的应用商店与Launcher为同包名,无需跨应用权限即可直接实现自启动逻辑
可行实现方案
方案1:监听自身包升级广播实现自启动
该方案无需依赖应用商店的安装回调,版本覆盖安装后自动触发
- 在
AndroidManifest.xml中注册静态广播接收器,监听仅本包可接收的ACTION_MY_PACKAGE_REPLACED广播,无需额外权限:
<receiver android:name=".PackageUpgradeReceiver" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> </intent-filter> </receiver>
- 广播接收器中直接拉起Launcher主页面:
class PackageUpgradeReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action != Intent.ACTION_MY_PACKAGE_REPLACED) return val launcherIntent = Intent(context, YourLauncherMainActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) addCategory(Intent.CATEGORY_HOME) } context.startActivity(launcherIntent) } }
注意:Android 10及以上系统后台启动Activity需要SYSTEM_ALERT_WINDOW悬浮窗权限,若你的Launcher为系统预装应用,直接在Manifest中声明该权限即可自动获得,无需用户手动授权
方案2:同包名应用商店安装完成直接触发
因为应用商店与Launcher同包名,可在应用商店的安装完成回调逻辑中,直接执行上述启动Launcher主页面的代码,不需要额外注册广播,适配性更强。
适配优化点
- 若为系统预装Launcher,可提前在
/system/etc/permissions目录下配置默认桌面权限,升级后系统会优先保留你的Launcher为默认桌面,不会出现临时跳转系统桌面的情况 - Android 12及以上版本启动Activity时建议额外添加
FLAG_ACTIVITY_CLEAR_TASK标记,避免旧任务栈残留导致跳转异常
内容的提问来源于stack exchange,提问作者Paweł Mańczak
相关产品推荐
相关产品推荐

