最近公司項目中用到類似的功能,記錄一下,權(quán)當(dāng)筆記吧,能幫到其他人也算是功德一件了。
1.準(zhǔn)備工作。由于我們需要判斷手機(jī)上是否安裝了特定的地圖應(yīng)用,所以第三方地圖的包名也就是必須的了。
百度地圖包名:com.baidu.BaiduMap
高德地圖包名:com.autonavi.minimap
騰訊地圖包名:com.tencent.map
2.根據(jù)包名判斷是否安裝了當(dāng)前應(yīng)用
- 方法一:
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;
}
}
這里要著重說一下這個方法,網(wǎng)上這個方法有很多,但一般都是在這個finally的位置進(jìn)行if-else判斷,判斷packageName是否為null。但是我用起來不太順手,不知道為什么沒有人說過這個問題。
一旦程序出現(xiàn)異常,進(jìn)入了catch語句,那之后的if判斷是沒有作用的。
if (packageInfo == null) {
return false;
} else { // 如果進(jìn)入了catch,無論packageInfo是否為null,程序都會走else條件句
return true;
}
3.根據(jù)各大平臺提供的URI,進(jìn)行相關(guān)頁面的跳轉(zhuǎn)
這里提供各平臺相關(guān)的地址,具體搜索:【平臺名】+URI API,就可以找到想要的結(jié)果。
高德: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
各個平臺基本上都有對應(yīng)的Uri地址以及對應(yīng)的調(diào)用示例,依樣畫葫蘆基本上都可以實現(xiàn)。
// 百度地圖
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);
具體方法名決定著跳轉(zhuǎn)的頁面,比如上面高德和騰訊方法為routeplan,線路規(guī)劃,跳轉(zhuǎn)的都是導(dǎo)航方式選擇頁面;而百度為geocoder,跳轉(zhuǎn)的是目的地位置詳情頁面。
都是常用的一些功能,就不放圖啦~就醬。