最近公司項目中用到類似的功能等龙,記錄一下甸箱,權當筆記吧闽坡,能幫到其他人也算是功德一件了栽惶。
1.準備工作。由于我們需要判斷手機上是否安裝了特定的地圖應用疾嗅,所以第三方地圖的包名也就是必須的了外厂。
百度地圖包名:com.baidu.BaiduMap
高德地圖包名:com.autonavi.minimap
騰訊地圖包名:com.tencent.map
2.根據包名判斷是否安裝了當前應用
- 方法一:
public static boolean isPackageInstalled(String packageName) {
return new File("/data/data/" + packageName).exists();
}
- 方法二:
public static boolean isPackageInstalled(Context mContext, String packagename) {
PackageInfo packageInfo = null;
try {
packageInfo = mContext.getPackageManager().getPackageInfo(packagename, 0);
} catch (PackageManager.NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
} finally {
return packageInfo == null ? false : true;
}
}
這里要著重說一下這個方法,網上這個方法有很多代承,但一般都是在這個finally的位置進行if-else判斷汁蝶,判斷packageName是否為null。但是我用起來不太順手论悴,不知道為什么沒有人說過這個問題掖棉。
一旦程序出現異常,進入了catch語句意荤,那之后的if判斷是沒有作用的啊片。
if (packageInfo == null) {
return false;
} else { // 如果進入了catch只锻,無論packageInfo是否為null玖像,程序都會走else條件句
return true;
}
3.根據各大平臺提供的URI,進行相關頁面的跳轉
這里提供各平臺相關的地址齐饮,具體搜索:【平臺名】+URI API捐寥,就可以找到想要的結果。
高德:http://lbs.amap.com/api/amap-mobile/guide/android/route
百度:http://lbsyun.baidu.com/index.php?title=uri/api/android
騰訊:http://lbs.qq.com/uri_v1/guide-route.html
各個平臺基本上都有對應的Uri地址以及對應的調用示例祖驱,依樣畫葫蘆基本上都可以實現握恳。
// 百度地圖
Intent naviIntent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("baidumap://map/geocoder?location=" + mEndPoint.getLatitude() + "," + mEndPoint.getLongitude()));
mContext.startActivity(naviIntent);
// 高德地圖
naviIntent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("androidamap://route?sourceApplication=appName&slat=&slon=&sname=我的位置&dlat="+ mEndPoint.getLatitude() +"&dlon="+ mEndPoint.getLongitude()+"&dname=目的地&dev=0&t=2"));
mContext.startActivity(naviIntent);
// 騰訊地圖
naviIntent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("qqmap://map/routeplan?type=drive&from=&fromcoord=&to=目的地&tocoord=" + mEndPoint.getLatitude() + "," + mEndPoint.getLongitude() + "&policy=0&referer=appName"));
mContext.startActivity(naviIntent);
具體方法名決定著跳轉的頁面,比如上面高德和騰訊方法為routeplan捺僻,線路規(guī)劃乡洼,跳轉的都是導航方式選擇頁面;而百度為geocoder匕坯,跳轉的是目的地位置詳情頁面束昵。
都是常用的一些功能,就不放圖啦~就醬葛峻。