Android 調(diào)起第三方地圖應(yīng)用進(jìn)行導(dǎo)航

最近公司項目中用到類似的功能,記錄一下,權(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)的是目的地位置詳情頁面。

都是常用的一些功能,就不放圖啦~就醬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容