跳转高德地图的一个carsh

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW cat=[android.intent.category.DEFAULT] dat=amapuri://route/plan/?dlat=30.241878&dlon=120.440527&dname=杭州萧山机场T1&dev=0&t=0 }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2114)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1757)
at android.app.Activity.startActivityForResult(Activity.java:4800)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)
at android.app.Activity.startActivityForResult(Activity.java:4740)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)
at android.app.Activity.startActivity(Activity.java:5161)
at android.app.Activity.startActivity(Activity.java:5129)
at com.geely.travel.geelytravel.utils.MapUtils.openGaodeMap(MapUtils.kt:70)
at com.geely.travel.geelytravel.ui.main.stroke.StrokeDetailAirTicketActivity$initListener$1$$special$$inlined$show$lambda$1.invoke(StrokeDetailAirTicketActivity.kt:60)
at com.geely.travel.geelytravel.ui.main.stroke.StrokeDetailAirTicketActivity$initListener$1$$special$$inlined$show$lambda$1.invoke(StrokeDetailAirTicketActivity.kt:36)
at com.afollestad.materialdialogs.internal.list.PlainListDialogAdapter.itemClicked(PlainListDialogAdapter.kt:64)
at com.afollestad.materialdialogs.internal.list.PlainListViewHolder.onClick(PlainListDialogAdapter.kt:34)
at android.view.View.performClick(View.java:6648)
at android.view.View.performClickInternal(View.java:6620)
at android.view.View.access$3100(View.java:787)
at android.view.View$PerformClick.run(View.java:26167)
at android.os.Handler.handleCallback(Handler.java:891)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:7539)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)

报错地方的代码

  /**
     * 打开高德地图
     * @param context            上下文
     * @param destination        经纬度
     * @param destinationAddress 目标地址
     * 高德地图:http://lbs.amap.com/api/amap-mobile/guide/android/route
     */
    fun openGaodeMap(context: Context, destination: LatLng,
                     destinationAddress: String) {
        val intent = Intent()
            intent.action = "android.intent.action.VIEW"
            intent.addCategory("android.intent.category.DEFAULT")
            intent.data = Uri.parse("amapuri://route/plan/?" +
                    "dlat=" + destination.latitude +
                    "&dlon=" + destination.longitude +
                    "&dname=" + destinationAddress +
                    "&dev=0" +
                    "&t=0")
            context.startActivity(intent)
    }

原因:低版本的高德地图导致,手机中的高德地图版本是2016年之前的版本,就会报这个错误,2016-01-28的版本已经修复这个carsh,可以在豌豆荚下载历史版本进行测试,获得修复版本的版本号,versionCode558是2015-12-30这个版本的版本号。

解决方法:获取手机的高德地图的版本,低于修复版本的就提示安装最新版本

  private fun getMapVersionCode(context: Context, packageName: String): Int {
        val packageManager = context.packageManager
        val packageInfos = packageManager.getInstalledPackages(0)
        if (packageInfos != null) {
            for (i in packageInfos.indices) {
                val packName = packageInfos[i].packageName
                if (packName == packageName) {
                    return packageInfos[i].versionCode
                }
            }
        }
        return 0
    }
    fun openGaodeMap(context: Context, destination: LatLng,
                     destinationAddress: String) {
        try {
            val versionCode = getMapVersionCode(context, GAODE_PACKAGE_NAME)
            if (versionCode <= 558) {
                context.toast("检测到当前高德地图版本过低无法跳转请先升级高德地图")
                return
            }
            val intent = Intent()
            intent.action = "android.intent.action.VIEW"
            intent.addCategory("android.intent.category.DEFAULT")
            intent.data = Uri.parse("amapuri://route/plan/?" +
                    "dlat=" + destination.latitude +
                    "&dlon=" + destination.longitude +
                    "&dname=" + destinationAddress +
                    "&dev=0" +
                    "&t=0")
            context.startActivity(intent)
        } catch (e: Exception) {
            CrashReport.postCatchedException(Exception(e))
        }
    }

猜你喜欢

转载自blog.csdn.net/jingerlovexiaojie/article/details/106472091