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

Kotlin开发点击按钮启动Google Maps应用崩溃问题排查

点击唤起Google Maps崩溃问题排查方案

你的XML布局不存在会直接触发点击崩溃的问题,崩溃基本由以下几个常见原因导致,逐个修复即可:

  • 未适配Android 11+包可见性规则
    如果项目targetSdkVersion >= 30,系统默认禁止应用查询其他已安装的第三方应用信息,你代码里的resolveActivity()会无法识别到已安装的Google Maps,甚至触发安全异常。需要在AndroidManifest.xml的<manifest>节点下(和<application>节点平级)添加如下查询声明:

    <queries>
        <package android:name="com.google.android.apps.maps" />
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="google.navigation" />
        </intent>
    </queries>
    
  • findViewById调用顺序错误触发空指针
    必须在Activity的onCreate生命周期中先调用setContentView()加载对应XML布局,再执行findViewById绑定控件。如果顺序写反,launch_button会返回null,调用setOnClickListener时直接触发空指针崩溃。
    修正后的Kotlin代码参考:

    class Navigation : AppCompatActivity() {
        private lateinit var launchButton: Button
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            // 先加载布局,注意替换成你自己的布局文件名
            setContentView(R.layout.activity_navigation)
            // 再绑定控件
            launchButton = findViewById(R.id.button1)
    
            launchButton.setOnClickListener {
                val mapIntent = Intent(
                    Intent.ACTION_VIEW,
                    Uri.parse("google.navigation:q=22.659239,88.435534&mode=1")
                ).apply {
                    setPackage("com.google.android.apps.maps")
                }
    
                // 加异常兜底,避免极端场景崩溃
                runCatching {
                    if (mapIntent.resolveActivity(packageManager) != null) {
                        startActivity(mapIntent)
                    } else {
                        // 可自行替换为弹窗提示,告知用户未安装Google Maps
                        Toast.makeText(this, "请先安装Google Maps", Toast.LENGTH_SHORT).show()
                    }
                }.onFailure {
                    Toast.makeText(this, "启动导航失败", Toast.LENGTH_SHORT).show()
                }
            }
        }
    }
    
  • 补充说明
    你使用的导航URI格式是正确的,纬度在前、经度在后,mode=1对应步行导航模式,没有语法问题。XML里RelativeLayout下的android:orientation="vertical"是无效属性(RelativeLayout本身不支持orientation配置),但不会引发崩溃,可以直接删除。
    如果是进入页面就崩溃(不是点击按钮时才崩),需要检查是否在Manifest里配置了Google Maps的API Key,以及是否在模块级build.gradle中引入了Google Maps SDK依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:36:07