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

Android 13无法打开Google Map报ActivityNotFoundException问题

Android 13下无法打开Google Map导航的解决方案

问题分析

你的代码在Android 13上触发ActivityNotFoundException,核心原因是Android 13引入了包可见性限制:应用默认无法访问其他应用的组件,除非在Manifest中明确声明允许访问目标包。另外,你通过getLaunchIntentForPackage获取Intent后修改action和data的方式,不符合Google Maps官方推荐的Intent构造逻辑,在Android 13的限制下会匹配不到正确的Activity。

解决方案

1. 添加包可见性声明

在AndroidManifest.xml的<manifest>标签内添加以下内容,允许应用访问Google Maps的包:

<queries>
    <package android:name="com.google.android.apps.maps" />
</queries>

2. 修改导航Intent构造逻辑

放弃getLaunchIntentForPackage的方式,直接构造符合Google Maps规范的ACTION_VIEW Intent,这种方式更可靠且适配Android 13的限制:

fun openNavigation(activity: Activity, latLng: LatLng) {
    try {
        val navigationUri = Uri.parse(String.format(
            activity.getString(R.string.maps_navigation_query),
            latLng.latitude,
            latLng.longitude
        ))
        val intent = Intent(Intent.ACTION_VIEW, navigationUri).apply {
            // 指定Google Maps包,确保打开对应应用
            setPackage(StringConstants.MAPS_PACKAGE_NAME)
            // 添加必要的flag,避免在某些场景下的异常
            addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        }
        // 先检查是否有应用能处理这个Intent(可选,但更健壮)
        if (intent.resolveActivity(activity.packageManager) != null) {
            activity.startActivity(intent)
        } else {
            // 处理无Google Maps的情况,比如提示用户安装
            // Toast.makeText(activity, "未安装Google Maps", Toast.LENGTH_SHORT).show()
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

补充说明

  • 确保R.string.maps_navigation_query的格式是Google Maps官方支持的导航URI,比如:"google.navigation:q=%f,%f" 或者包含导航模式的"google.navigation:q=%f,%f&mode=d"(d代表驾车,w步行,b骑行)。
  • 添加Intent.FLAG_ACTIVITY_NEW_TASK可以避免在非Activity上下文启动时的异常,同时让导航页面在独立任务栈中打开,提升用户体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:50:21