Android 13中调用MIUI系统Activity崩溃问题求助
问题解决思路
核心错误说明
你在自己应用的AndroidManifest.xml中声明MIUI系统应用的Activity完全无效,因为com.miui.powerkeeper.ui.HiddenAppsConfigActivity属于MIUI的powerkeeper系统应用,只有该系统应用的Manifest才能定义它的导出状态、Intent Filter等属性,你的应用Manifest无法修改或覆盖系统应用组件的配置。
报错原因
- MIUI版本变更:适配Android 13的MIUI(如MIUI 14/15)可能对该隐藏Activity做了调整——要么将其标记为
exported=false,要么直接移除了该Activity类,或者修改了类路径。 - Android 13权限限制:Android 13对跨应用组件交互的限制更严格,即使是显式启动,若目标组件未导出或厂商做了额外拦截,也会触发
ActivityNotFoundException。
可行解决方案
方案1:尝试使用公开Intent Action启动
避免硬编码类名,改用MIUI可能公开的Intent Action启动页面,示例代码:val intent = Intent("miui.intent.action.HIDDEN_APPS_CONFIG") intent.putExtra("package_name", activity.packageName) intent.putExtra("package_label", getText(R.string.app_name)) intent.setPackage("com.miui.powerkeeper") // 限定包名避免匹配其他应用若该Action无效,可通过反编译对应版本的
com.miui.powerkeeper应用,确认当前可用的Activity类名或Intent Action。方案2:添加权限并做存在性校验
Android 13+中部分厂商可能要求应用具备查询其他应用的权限,先在Manifest中添加:<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:ignore="QueryAllPackagesPermission" />再在代码中校验目标Activity是否存在,避免崩溃:
val intent = Intent().apply { setClassName("com.miui.powerkeeper", "com.miui.powerkeeper.ui.HiddenAppsConfigActivity") putExtra("package_name", activity.packageName) putExtra("package_label", getText(R.string.app_name)) } val isActivityAvailable = activity.packageManager.resolveActivity( intent, PackageManager.MATCH_DEFAULT_ONLY or PackageManager.MATCH_DIRECT_BOOT_AWARE ) != null if (isActivityAvailable) { startActivity(intent) } else { // 引导用户手动操作:比如打开「设置→省电与电池→应用省电管理→隐藏应用管理」 Toast.makeText(activity, "请手动前往MIUI省电设置管理隐藏应用", Toast.LENGTH_SHORT).show() }方案3:兜底的手动引导方案
若上述方法均无效,说明MIUI已禁止第三方应用直接启动该页面,只能引导用户手动进入对应设置页面,这是最稳定的兜底方案。
内容的提问来源于stack exchange,提问作者AlexS
相关产品推荐
相关产品推荐

