前言
由于項目中有用到位置信息,最近閑來無事,決定加個導航功能(反正沒有產(chǎn)品經(jīng)理,隨便折騰);考慮到內(nèi)部集成成本過高,于是決定調(diào)用外部地圖。
-
至于地圖,給出了高德地圖、百度地圖、騰訊地圖供用戶選擇,算是目前主流的三個地圖吧,相信大多數(shù)用戶都會有其中的一兩個吧。
地圖選擇.jpeg
說明
本文介紹的是公交出行的路線規(guī)劃,如需選擇其它出行方式,修改相關(guān)配置就好,文章中有給出,可也參考官方文檔。
這里的起始位置,均使用的外部地圖的當前位置,操作簡單;也可以自行設置起始位置。
高德地圖
-
效果如下:
高德地圖.gif 想省事看這,拷走就好,重要參數(shù)有說明:
/**
* 打開高德地圖(公交出行,起點位置使用地圖當前位置)
*
* 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();
}
}
百度地圖
- 百度地圖官方 api 戳這里 ??
-
效果如下,其實類似:
百度地圖.gif
代碼在這:
* 打開百度地圖(公交出行,起點位置使用地圖當前位置)
*
* 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();
}
}
騰訊地圖
官方暫時只支持打開web端,并不支持外部打開騰訊地圖app(合作伙伴可以),但還是找到解決方法。
-
效果如下,其實也類似:
騰訊地圖.gif 代碼在這:
/**
* 打開騰訊地圖(公交出行,起點位置使用地圖當前位置)
*
* 公交: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;
}
- 歡迎點贊哦,不勝感激~



