调用第三方地图app导航(高德、百度、腾讯)

当前位置导航到某个地方,还可以设置出发地的经纬度和位置信息,具体看各官网参数设置。

以下代码可以直接使用。

/**
 * Date: 2022-11-23
 * Author: lanzi
 * 调用第三方地图app导航
 */
public class MapNavigationUtils {
    public static final String PN_GAODE_MAP = "com.autonavi.minimap";// 高德地图包名
    public static final String PN_BAIDU_MAP = "com.baidu.BaiduMap"; // 百度地图包名
    public static final String PN_TENCENT_MAP = "com.tencent.map"; // 腾讯地图包名

    /**
     * 检查地图应用是否安装
     */
    public static boolean isGaodeMapInstall(Context context) {
        return isInstallPackage(context, PN_GAODE_MAP);
    }

    public static boolean isBaiduMapInstall(Context context) {
        return isInstallPackage(context, PN_BAIDU_MAP);
    }

    public static boolean isTencentMapInstall(Context context) {
        return isInstallPackage(context, PN_TENCENT_MAP);
    }

    private static boolean isInstallPackage(Context context, String packageName) {
        try {
            PackageManager packageManager = context.getPackageManager();
            PackageInfo info = packageManager.getPackageInfo(packageName, 0);
            if (info != null) {
                return true;
            }
        } catch (Exception e) {
            // loge(e);
        }
        return false;
    }

    /**
     * 打开高德地图导航(https://lbs.amap.com/api/amap-mobile/guide/android/route)
     *
     * @param context   context
     * @param address   终点名称
     * @param latitude  终点纬度
     * @param longitude 终点经度
     */
    public static void openGaodeNavigation(Context context, String address, double latitude, double longitude) {
        if (isGaodeMapInstall(context)) {
            Uri uri = Uri.parse("amapuri://route/plan/?dlat=" + latitude
                    + "&dlon=" + longitude
                    + "&dname=" + address
                    + "&dev=0&t=0");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            context.startActivity(intent);
        } else {
            Toast.makeText(context, "未安装高德地图", Toast.LENGTH_LONG).show();
        }
    }

    /**
     * 打开百度地图导航(https://lbsyun.baidu.com/index.php?title=uri/api/android#service-page-anchor9)
     *
     * @param context   context
     * @param address   终点名称
     * @param latitude  终点纬度
     * @param longitude 终点经度
     */
    public static void openBaiduNavigation(Context context, String address, double latitude, double longitude) {
        if (isBaiduMapInstall(context)) {
            String dLatlng = latitude + "," + longitude; // 目的地坐标(注意:坐标先纬度,后经度)
            Uri uri = Uri.parse("baidumap://map/direction?origin=我的位置"
                    + "&destination=name:" + address
                    + "|latlng:" + dLatlng
                    + "&coord_type=gcj02&mode=driving&src=andr.baidu.openAPIdemo");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            context.startActivity(intent);
        } else {
            Toast.makeText(context, "未安装百度地图", Toast.LENGTH_LONG).show();
        }
    }

    /**
     * 打开腾讯地图导航(https://lbs.qq.com/webApi/uriV1/uriGuide/uriMobileRoute)
     *
     * @param context   context
     * @param address   终点名称
     * @param latitude  终点纬度
     * @param longitude 终点经度
     */
    public static void openTencentNavigation(Context context, String address, double latitude, double longitude) {
        if (isTencentMapInstall(context)) {
            String dLatlng = latitude + "," + longitude;
            Uri uri = Uri.parse("qqmap://map/routeplan?type=drive&from=我的位置&fromcoord=CurrentLocation"
                    + "&to=" + address
                    + "&tocoord=" + dLatlng
                    + "&referer=key"); // key:填写你自己的腾讯地图开发者key
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            context.startActivity(intent);
        } else {
            Toast.makeText(context, "未安装腾讯地图", Toast.LENGTH_LONG).show();
        }
    }
}

注:腾讯地图需要申请一个开发者key

添加权限

<uses-permission
        android:name="android.permission.QUERY_ALL_PACKAGES"
        tools:ignore="QueryAllPackagesPermission" />

由于权限限制,在安卓12上若不加这个权限会请求不到

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值