Android 11调用Google导航提示未安装或禁用该如何修复?
Android 11调用Google Maps报错"google maps is not installed or disabled"修复方案
问题根源
Android 11(API 级别30)引入了包可见性过滤机制,默认情况下应用无法直接查询到设备上安装的其他第三方应用,即便用户已经安装了Google Maps,你的应用也无法检测到它的存在,进而抛出该错误。
可行修复方案
方案1:添加包可见性声明(推荐优先使用)
这是官方要求的标准适配方案,修改后无需改动业务逻辑即可解决90%以上的该类报错:
- 打开项目根目录下的
AndroidManifest.xml文件,在<manifest>根节点(与<application>节点平级,不要嵌套在<application>内部)添加如下配置:
<queries> <!-- 声明需要查询Google Maps应用的权限 --> <package android:name="com.google.android.apps.maps" /> </queries>
方案2:增加可用性校验兜底逻辑
适配包可见性之后,新增前置检测逻辑,避免用户确实未安装/禁用Google Maps时出现闪退:
- 调用导航前先执行可用性校验,Kotlin示例代码如下:
fun checkGoogleMapsEnable(context: Context): Boolean { return try { context.packageManager.getApplicationInfo("com.google.android.apps.maps", 0).enabled } catch (e: Exception) { // 应用未安装/被禁用 false } }
- 检测返回
false时,可主动弹出提示引导用户安装或启用Google Maps。
方案3:临时降级适配(不推荐长期使用)
如果需要临时快速修复,可将项目的targetSdkVersion降级到29(Android 10)及以下,此时包可见性机制不会生效,报错也会消失。但该方案不符合后续Google Play的上架版本要求,仅适合临时过渡使用。
提示:若用户设备本身确实没有安装Google Maps、或者安装后手动禁用了该应用,属于正常业务异常,仅需按方案2的逻辑做友好提示即可。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

