前言
公司以前有個需求凹髓,需要使用導(dǎo)航吟策,但是工期很短相赁,那么怎么解決呢?我們想到了URL Scheme來實現(xiàn)
URL Scheme是什么
android中的scheme是一種頁面內(nèi)跳轉(zhuǎn)協(xié)議,是一種非常好的實現(xiàn)機制,通過定義自己的scheme協(xié)議赠幕,可以非常方便跳轉(zhuǎn)app中的各個頁面俄精;通過scheme協(xié)議,服務(wù)器可以定制化告訴App跳轉(zhuǎn)那個頁面榕堰,可以通過通知欄消息定制化跳轉(zhuǎn)頁面竖慧,可以通過H5頁面跳轉(zhuǎn)頁面等。
Map APP相關(guān)
目前市場上占有率比較高的地圖主要有:百度逆屡,高德圾旨,谷歌(CN大陸暫時不能使用),騰訊
四大公司相關(guān)的API平臺問題
百度地圖:http://lbsyun.baidu.com/index.php?title=uri/api/android
高德地圖:http://lbs.amap.com/api/uri-api/android-uri-explain/
騰訊地圖:http://lbs.qq.com/uri_v1/index.html
谷歌地圖:https://developers.google.com/maps/documentation/android-api/intents
代碼示例
檢查是否安裝
* 檢查手機上是否安裝了指定的軟件
* @param context
* @param packageName:應(yīng)用包名
* @return
*/
public static boolean isAvilible(Context context, String packageName){
//獲取packagemanager
final PackageManager packageManager = context.getPackageManager();
//獲取所有已安裝程序的包信息
List packageInfos = packageManager.getInstalledPackages(0);
//用于存儲所有已安裝程序的包名
List packageNames = new ArrayList();
//從pinfo中將包名字逐一取出魏蔗,壓入pName list中
if(packageInfos != null){
for(int i = 0; i < packageInfos.size(); i++){
String packName = packageInfos.get(i).packageName;
packageNames.add(packName);
}}
//判斷packageNames中是否有目標程序的包名砍的,有TRUE,沒有FALSE
return packageNames.contains(packageName);
}
百度地圖
if(isAvilible(context,"com.baidu.BaiduMap")){//傳入指定應(yīng)用包名
try {
//? intent = Intent.getIntent("intent://map/direction?origin=latlng:34.264642646862,108.95108518068|name:我家&destination=大雁塔&mode=driving?ion=西安&src=yourCompanyName|yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
intent = Intent.getIntent("intent://map/direction?" +
//"origin=latlng:"+"34.264642646862,108.95108518068&" +? //起點? 此處不傳值默認選擇當(dāng)前位置
"destination=latlng:"+location[0]+","+location[1]+"|name:我的目的地"+? ? ? ? //終點
"&mode=driving&" +? ? ? ? ? //導(dǎo)航路線方式
"region=北京" +? ? ? ? ? //
"&src=慧醫(yī)#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
context.startActivity(intent); //啟動調(diào)用
} catch (URISyntaxException e) {
Log.e("intent", e.getMessage());
}
}else{
//未安裝
//market為路徑莺治,id為包名
//顯示手機上所有的market商店
Toast.makeText(context, "您尚未安裝百度地圖", Toast.LENGTH_LONG).show();
Uri uri = Uri.parse("market://details?id=com.baidu.BaiduMap");
intent = new Intent(Intent.ACTION_VIEW, uri);
context.startActivity(intent);
}
高德地圖
if (isAvilible(context, "com.autonavi.minimap")) {
try{
intent = Intent.getIntent("androidamap://navi?sourceApplication=慧醫(yī)&poiname=我的目的地&lat="+location[0]+"&lon="+location[1]+"&dev=0");
context.startActivity(intent);
} catch (URISyntaxException e)
{e.printStackTrace(); }
}else{
Toast.makeText(context, "您尚未安裝高德地圖", Toast.LENGTH_LONG).show();
Uri uri = Uri.parse("market://details?id=com.autonavi.minimap");
intent = new Intent(Intent.ACTION_VIEW, uri);
context.startActivity(intent);
}
谷歌地圖:
if (isAvilible(context,"com.google.android.apps.maps")) {
Uri gmmIntentUri = Uri.parse("google.navigation:q="+location[0]+","+location[1] +", + Sydney +Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
context.startActivity(mapIntent);
}else {
Toast.makeText(context, "您尚未安裝谷歌地圖", Toast.LENGTH_LONG).show();
Uri uri = Uri.parse("market://details?id=com.google.android.apps.maps");
intent = new Intent(Intent.ACTION_VIEW, uri);
context.startActivity(intent);? }
騰訊地圖
騰訊暫時不提供相關(guān)接口