Android啟動第三方地圖APP導航功能
阿新 • • 發佈:2018-12-08
上一個我的工具類,沒啥好多說的,傳遞經緯度的時候標準傳入方式也有
public class PccGo2MapUtil { private Context context; public PccGo2MapUtil(Context context) { this.context = context; } /** * 啟動高德地圖,從我的位置到addressName * @param addressName 終點 */ private void go2Gaode(String addressName) { try { Intent intent = Intent.getIntent("androidamap://route?sourceApplication=softname&sname=我的位置&dname=" + addressName + "&dev=0&m=0&t=1"); if (isAvilible(context, "com.autonavi.minimap")) { context.startActivity(intent); } else { Toast.makeText(context,"高德地圖未安裝",Toast.LENGTH_SHORT).show(); } } catch (URISyntaxException e) { e.printStackTrace(); } } /** * 啟動百度地圖,從我的位置到addressName * @param addressName 終點 */ public void go2Baidu(String addressName) { try { Intent intent = Intent.getIntent("intent://map/direction?origin=我的位置&destination=" + addressName + "&mode=driving&src=yourCompanyName|yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end"); if (isAvilible(context, "com.baidu.BaiduMap")) { context.startActivity(intent); } else { Toast.makeText(context,"百度地圖未安裝",Toast.LENGTH_SHORT).show(); } } catch (URISyntaxException e) { e.printStackTrace(); } } /** * 啟動百度地圖,從我的位置到指定經緯度位置 * @param lat 緯度 * @param lng 經度 */ public void go2Baidu(double lat,double lng) { String latlng = lat + "," + lng; try { Uri uri = Uri.parse("baidumap://map/direction?destination=latlng:"+"目的地lat"+","+ "目的地lng"+"|name:"+"目的地名稱"+"&mode=driving"); Intent intent = Intent.getIntent("intent://map/direction?origin=我的位置&destination=" + latlng + "&mode=driving&src=yourCompanyName|yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end"); if (isAvilible(context, "com.baidu.BaiduMap")) { context.startActivity(intent); } else { Toast.makeText(context,"百度地圖未安裝",Toast.LENGTH_SHORT).show(); } } catch (URISyntaxException e) { e.printStackTrace(); } } /** * 檢查手機上是否安裝了指定的packageName的軟體 * @param context * @param packageName 應用包名 * @return */ public static boolean isAvilible(Context context, String packageName) { //獲取packagemanager final PackageManager packageManager = context.getPackageManager(); //獲取所有已安裝程式的包資訊 List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0); //用於儲存所有已安裝程式的包名 List<String> packageNames = new ArrayList<String>(); //從pinfo中將包名字逐一取出,壓入pName list中 if (packageInfos != null) { for (int i = 0; i < packageInfos.size(); i++) { String packName = packageInfos.get(i).packageName; packageNames.add(packName); } } //判斷packageNames中是否有目標程式的包名 return packageNames.contains(packageName); } }
經緯度規範傳入方式:
Intent intent = Intent.getIntent("androidamap://route?sourceApplication=softname&sname=我的位置&dlat=" + location.getLatitude() + "&dlon=" + location.getLongitude() + "&dname=" + addressname + "&dev=0&m=0&t=1");
當然很多時候你已經獲取到了經緯度,就不需要像我這樣去用location獲取了,可以直接傳進來