Android跳转第三方地图导航(高德、百度)

1,893 阅读1分钟

一、判断应用是否安装

  • 通过获取应用列表对比判断
/**
 * 判断手机中 是否安装指定包名的app
 */
fun isInstallApk(context: Context, name:String):Boolean{
    var packages  = context.packageManager.getInstalledPackages(0)
    for ( p in packages){
        if (p.packageName.equals(name)) return true else continue
    }
    return false
}
  • 可以通过获取某个应用信息并捕获未安装时的异常判断
fun isInstallApk(context: Context, name:String):Boolean{
    var pInfo:PackageInfo? = null
    try {
        pInfo = packageManager.getPackageInfo(name,0)//com.baidu.BaiduMap
    }catch (e:Exception){}
   return if (null ==pInfo) false else true
}

(小提示:获取应用信息时,需要添加读取文件权限:android.permission.READ_EXTERNAL_STORAGE)

二、跳转第三方地图导航

  • 百度地图导航
fun goBaiduNavigation(context: Context,lon: Double,lat: Double, cord_type:String = "gcj02"){
    //bd09ll(百度经纬度坐标)
    //bd09mc(百度墨卡托坐标)
    //gcj02(经国测局加密的坐标)
    //wgs84(gps获取的原始坐标)

    if (isInstallApk(context,"com.baidu.BaiduMap")){
        var url = "baidumap://map/direction?destination=${lat},${lon}&coord_type=${cord_type}&mode=walking&src=com.zlqf.patrol4"
        var i1 = Intent()
        i1.setData(Uri.parse(url))
        context.startActivity(i1)
    }else{
        context.toast("请先安装百度地图")
    }

}

百度地图官网参考链接: lbsyun.baidu.com/index.php?t…

  • 高德地图导航
fun goNavigation(context: Context,lon:Double,lat:Double){
    if (isInstallApk(context,"com.autonavi.minimap")){
        context.startActivity(Intent().apply {
            setAction("android.intent.action.VIEW")
            var url = "amapuri://route/plan/?dlat=${lat}&dlon=${lon}&dev=0&t=0"
            setData(Uri.parse(url))
        })
    }else{
        context.toast("请先安装高德地图")
    }
}

高德地图官网参考链接lbs.amap.com/api/amap-mo…

提示:官网链接中放了更为详细的参数说明。