应用内调用三大主流地图软件并导航

2019-08-17  本文已影响0人  Mingho96

一、准备

通常地,在打开一个第三方软件前,要判断它是否安装,如果没安装,要么给出相应提示,要么跳转到应用市场。这里我们简单点,直接给提示。在下面的方法中,传入上下文和要判断的应用的包名:

    public static boolean isPackageInstalled(Context mContext, String packagename) {
        PackageInfo packageInfo = null;
        try {
            packageInfo = mContext.getPackageManager().getPackageInfo(packagename, 0);
        } catch (PackageManager.NameNotFoundException e) {
            packageInfo = null;
            e.printStackTrace();
        } finally {
            Log.i("app is install?--->", String.valueOf(packageInfo!=null));
            return packageInfo != null;
        }
    }

二、开始

创建打开第三方应用并传递参数的方法(以高德地图为例)

    /**
     * 启动高德App进行导航
     * @param lat  目的地纬度
     * @param lng  目的地经度
     */
    public static void openGaoDeNavi(double lat,double lng) {
        StringBuffer stringBuffer = new StringBuffer("androidamap://navi?sourceApplication=")
                .append("amap").append("&lat=").append(lat)
                .append("&lon=").append(lng)
                .append("&dev=").append(1)
                .append("&style=").append(0);
        Intent intent = new Intent(Intent.ACTION_VIEW, android.net.Uri.parse(stringBuffer.toString()));
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setPackage("com.autonavi.minimap");
        cont.startActivity(intent);
    }

三、使用

 if (isPackageInstalled(MainActivity.this,"com.autonavi.minimap"))
          {
               MapUtils.openGaoDeNavi(32.543401,101.111101);
           }
  else
            Toast.makeText(MainActivity.this, "你没安装高德地图", Toast.LENGTH_SHORT).show();

四、封装工具类MapUtils.java

public class MapUtils {

    @SuppressLint("StaticFieldLeak")
    private static Context cont;

    public static void init(Context context){
        cont=context;
    }

    /**
     * 启动高德App进行导航
     * @param lat  目的地纬度
     * @param lng  目的地经度
     */
    public static void openGaoDeNavi(double lat,double lng) {
        StringBuffer stringBuffer = new StringBuffer("androidamap://navi?sourceApplication=")
                .append("amap").append("&lat=").append(lat)
                .append("&lon=").append(lng)
                .append("&dev=").append(1)
                .append("&style=").append(0);
        Intent intent = new Intent(Intent.ACTION_VIEW, android.net.Uri.parse(stringBuffer.toString()));
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setPackage("com.autonavi.minimap");
        cont.startActivity(intent);
    }

    /**
     * 打开腾讯地图app并导航
     * @param lat  目的地纬度
     * @param lng  目的地经度
     */
    public static void openTencentNavi(double lat,double lng){
        StringBuffer stringBuffer= new StringBuffer("qqmap://map/routeplan?type=drive")
                .append("&fromcoord=CurrentLocation")
                .append("&tocoord=").append(lat).append(",").append(lng)
//                .append("&to=吉庚")
                .append("&referer=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77");

        Intent intent = new Intent(Intent.ACTION_VIEW, android.net.Uri.parse(stringBuffer.toString()));
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setPackage("com.tencent.map");
        cont.startActivity(intent);
    }


    /**
     * 打开百度地图导航客户端
     * @param lat  目的地纬度
     * @param lng  目的地经度
     */
    public static void openBaiduNavi(double lat,double lng) {
        StringBuffer stringBuffer = new StringBuffer("baidumap://map/navi?location=")
                .append(lat).append(",")
                .append(lng)
                .append("&type=TIME");
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(stringBuffer.toString()));
        intent.setPackage("com.baidu.BaiduMap");
        cont.startActivity(intent);
    }
}

五、特别鸣谢

安卓通过经纬度,实现intent调用百度,高德,Google地图客户端实现驾车导航功能
Android App调用跳转百度地图、高德地图、腾讯地图进行目的地导航

六、参考文献

各大地图的详细配置参数,可以查阅官方接口文档
1、百度地图:http://lbsyun.baidu.com/index.php?title=uri/api/android
2、高德地图:https://lbs.amap.com/api/amap-mobile/guide/android/navigation
3、腾讯地图:http://lbs.qq.com/uri_v1/guide-mobile-navAndRoute.html

上一篇 下一篇

猜你喜欢

热点阅读