跳轉到高德地圖或百度地圖或高德網頁導航
阿新 • • 發佈:2019-02-10
最近做一個新專案,需要用到導航,專案集成了高德的SDK,所以本來想直接用SDK內的導航方法,但是發現高德最新版的導航改版了,如果SDK內加上導航模組會使得整個專案大十幾二十M,所以決定棄用SDK內的導航,最終決定,採用以下方案:
1.當手機內有高德地圖app時,調起此app來導航
2.當手機內有百度地圖app時,調起此app來導航
3.當手機內既沒有高德地圖app,也沒有百度地圖app時,調起瀏覽器,進入高德網頁導航
程式碼很簡單,如下:
1.
判斷是否安裝了高德地圖,若有則傳入導航引數並調起:
if (isInstallApk(mContext, "com.autonavi.minimap" )) {// 是否安裝了高德
Intent intents = new Intent();
intents.setData(Uri.parse("androidamap://navi?sourceApplication=nyx_super&lat=" + wLatLng.latitude + "&lon=" + wLatLng.longitude + "&dev=0&style=2"));
startActivity(intents); // 啟動呼叫
}
以上是uri內的引數說明,可根據自己的需求增加欄位
高德關於此功能的網址: 點這裡
2.
判斷是否安裝了百度地圖,若有則傳入導航引數並調起:
if (isInstallApk(mContext, "com.baidu.BaiduMap")) {// 是否安裝了百度地圖
Intent intent = new Intent();
// 駕車導航
intent.setData(Uri.parse("baidumap://map/navi?location=" + CommonUtils.bd_encrypt(wLatLng.latitude, wLatLng.longitude)));
startActivity(intent); // 啟動呼叫
}
百度的此功能與高德不一樣,不同的導航方式,其uri的字首是不同的,具體可參考官網,網址如下:點這裡
3.
當手機內既沒有高德地圖app,也沒有百度地圖app時,調起瀏覽器,進入高德網頁導航
if (!isInstallApk(mContext, "com.autonavi.minimap")&&!isInstallApk(mContext, "com.baidu.BaiduMap")) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
// 駕車導航
intent.setData(Uri.parse("http://uri.amap.com/navigation?from=" + cLatLng.longitude + "," + cLatLng.latitude + "&to="+ wLatLng.longitude + "," + wLatLng.latitude + "&mode=car&src=nyx_super"));
startActivity(intent); // 啟動呼叫
}
高德關於此功能的網址:點這裡
最後把isInstallApk方法發出:
/** 判斷手機中是否安裝指定包名的軟體 */
public static boolean isInstallApk(Context context, String name) {
List<PackageInfo> packages = context.getPackageManager().getInstalledPackages(0);
for (int i = 0; i < packages.size(); i++) {
PackageInfo packageInfo = packages.get(i);
if (packageInfo.packageName.equals(name)) {
return true;
} else {
continue;
}
}
return false;
}