當項目中需要用到地點導航,可能你需要集成三方地圖,但現在更多的應用的做法是直接調起手機中已經安裝好的地圖,高德,百度等等,這樣比集成三方地圖來得更快,可行性也更高,下面代碼都是參考網絡上的,自己整理了下
一.使用谷歌地圖
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://ditu.google.cn/maps?hl=zh&mrt=loc&q=31.1198723,121.1099877(上海青浦大街100號)")); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK & Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"); startActivity(intent);
二、使用三方地圖
判斷地圖應用是否安裝
private boolean isInstallByread(String packageName) { return new File("/data/data/" + packageName).exists(); }
private void openGaode(){ try { if (isInstallByread("com.autonavi.minimap")) { Intent intent = new Intent( "android.intent.action.VIEW", android.net.Uri.parse( "androidamap://route?sourceApplication=應用名稱" + "&dlat="+ currentLatitude//終點的經度 + "&dlon="+ currentLongitude//終點的緯度 +"&dname=終點地名" + "&dev=0" + "&t=1")); startActivity(intent); } else { Toast.makeText(MainActivity.this, "沒有安裝百度地圖客戶端,請先下載該地圖應用", Toast.LENGTH_SHORT).show(); } } catch (Exception e) { e.printStackTrace(); } }
2.百度地圖
private void openBaidu(){ try { if (isInstallByread("com.baidu.BaiduMap")) { Intent intent = new Intent(); intent.setData(Uri.parse("baidumap://map/direction?origin=name:我的位置|latlng:" +locLongitude//起始點經度 +"," +locLatitude//起始點緯度 +"&destination=" +currentLatitude//終點緯度 +"," +currentLongitude//終點經度 +"&mode=transit&sy=0&index=0&target=1")); intent.setPackage("com.baidu.BaiduMap"); startActivity(intent); // 啟動調用 } else { Toast.makeText(MainActivity.this, "沒有安裝百度地圖客戶端,請先下載該地圖應用", Toast.LENGTH_SHORT).show(); } } catch (Exception e) { e.printStackTrace(); } }
個人測試的時候僅測試了下高德和百度的都可以,需要注意的是高德地圖的經緯度和百度地圖的經緯度存在差異,也就是說,假如你的項目使用高德api獲取到的經緯度,不能直接拿到百度地圖來進行導航,需要進行轉換,代碼可以網上查,挺多,反之亦然。谷歌地圖的啟動的時候一直提示網絡無法連接,因為是外網,需要翻牆,估計在項目中用到不多,手機上如果沒有谷歌地圖的話,啟動會報ActivityNotFoundException,try catch下就好了,代碼僅供參考,有建議或意見歡迎提出
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。