Android 调起第三方地图应用进行导航

最近公司项目中用到类似的功能,记录一下,权当笔记吧,能帮到其他人也算是功德一件了。

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,线路规划,跳转的都是导航方式选择页面;而百度为geocoder,跳转的是目的地位置详情页面。

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

点赞