Android 打開外部高德、百度、騰訊地圖進行導航

前言

  • 由于項目中有用到位置信息,最近閑來無事,決定加個導航功能(反正沒有產(chǎn)品經(jīng)理,隨便折騰);考慮到內(nèi)部集成成本過高,于是決定調(diào)用外部地圖。

  • 至于地圖,給出了高德地圖、百度地圖、騰訊地圖供用戶選擇,算是目前主流的三個地圖吧,相信大多數(shù)用戶都會有其中的一兩個吧。


    地圖選擇.jpeg

說明

  • 本文介紹的是公交出行的路線規(guī)劃,如需選擇其它出行方式,修改相關(guān)配置就好,文章中有給出,可也參考官方文檔。

  • 這里的起始位置,均使用的外部地圖的當前位置,操作簡單;也可以自行設置起始位置。

高德地圖

/**
 * 打開高德地圖(公交出行,起點位置使用地圖當前位置)
 * 
 * t = 0(駕車)= 1(公交)= 2(步行)= 3(騎行)= 4(火車)= 5(長途客車)
 *
 * @param dlat  終點緯度
 * @param dlon  終點經(jīng)度
 * @param dname 終點名稱
 */
private void openGaoDeMap(double dlat, double dlon, String dname) {
    if (checkMapAppsIsExist(this, "com.autonavi.minimap")) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setPackage("com.autonavi.minimap");
        intent.addCategory("android.intent.category.DEFAULT");
        intent.setData(Uri.parse("androidamap://route?sourceApplication=" + R.string.app_name
                + "&sname=我的位置&dlat=" + dlat
                + "&dlon=" + dlon
                + "&dname=" + dname
                + "&dev=0&m=0&t=1"));
        startActivity(intent);
    } else {
        ToastUtils.makeText(this, "高德地圖未安裝", false).show();
    }
}

百度地圖

 * 打開百度地圖(公交出行,起點位置使用地圖當前位置)
 * 
 * mode = transit(公交)、driving(駕車)、walking(步行)和riding(騎行). 默認:driving
 * 當 mode=transit 時 : sy = 0:推薦路線 、 2:少換乘 、 3:少步行 、 4:不坐地鐵 、 5:時間短 、 6:地鐵優(yōu)先
 *
 * @param dlat  終點緯度
 * @param dlon  終點經(jīng)度
 * @param dname 終點名稱
 */
private void openBaiduMap(double dlat, double dlon, String dname) {
    if (checkMapAppsIsExist(this, "com.baidu.BaiduMap")) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("baidumap://map/direction?origin=我的位置&destination=name:"
                + dname
                + "|latlng:" + dlat + "," + dlon
                + "&mode=transit&sy=3&index=0&target=1"));
        startActivity(intent);
    } else {
        ToastUtils.makeText(this, "百度地圖未安裝", false).show();
    }
}

騰訊地圖

/**
 * 打開騰訊地圖(公交出行,起點位置使用地圖當前位置)
 * 
 * 公交:type=bus,policy有以下取值
 * 0:較快捷 、 1:少換乘 、 2:少步行 、 3:不坐地鐵
 * 駕車:type=drive,policy有以下取值
 * 0:較快捷 、 1:無高速 、 2:距離短
 * policy的取值缺省為0
 *
 * @param dlat  終點緯度
 * @param dlon  終點經(jīng)度
 * @param dname 終點名稱
 */
private void openTencent(double dlat, double dlon, String dname) {
    if (checkMapAppsIsExist(this, "com.tencent.map")) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("qqmap://map/routeplan?type=bus&from=我的位置&fromcoord=0,0"
                + "&to=" + dname
                + "&tocoord=" + dlat + "," + dlon
                + "&policy=1&referer=myapp"));
        startActivity(intent);
    } else {
        ToastUtils.makeText(this, "騰訊地圖未安裝", false).show();
    }
}

檢測地圖是否安裝

  • 當然這里還用到了包檢測工具:
/**
 * 檢測地圖應用是否安裝
 *
 * @param context
 * @param packagename
 * @return
 */
public boolean checkMapAppsIsExist(Context context, String packagename) {
    PackageInfo packageInfo;
    try {
        packageInfo = context.getPackageManager().getPackageInfo(packagename, 0);
    } catch (Exception e) {
        packageInfo = null;
        e.printStackTrace();
    }
    return packageInfo != null;
}
  • 歡迎點贊哦,不勝感激~
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容