最近项目中需要添加一个对于目的地的导航功能,查阅了不少资料发现都是比较老的内容于是准备自己写个地图功能,下面直接开始,用到的几个链接:
百度调起app传送门:http://lbsyun.baidu.com/index.php?title=uri
百度网页调起地图传送门:http://lbsyun.baidu.com/index.php?title=uri/api/web
高德调起pp传送门:http://lbs.amap.com/api/amap-mobile/summary/
本文只展示了打点地址的功能,其他功能读者可以自行参考api文档自己研究,首先为了能够调起第三方地图app必须得先判断是否安装了地图app代码如下:
/** * 地图应用是否安装 * @return */ public static boolean isGdMapInstalled(){ return isInstallPackage("com.autonavi.minimap"); } public static boolean isBaiduMapInstalled(){ return isInstallPackage("com.baidu.BaiduMap"); } private static boolean isInstallPackage(String packageName) { return new File("/data/data/" + packageName).exists(); }
这里如果存在就进行跳转,百度跳转如下:
/** * 打开百度地图 */ /** * * @param slat 纬度 * @param slon 经度 * @param content 内容 */ private void openBaiduMap(double slat, double slon, String content) { if (OpenLocalMapUtil.isBaiduMapInstalled()) { try { String uri = OpenLocalMapUtil.getBaiduMapUri(String.valueOf(slat), String.valueOf(slon), content); Intent intent = new Intent(); intent.setData(Uri.parse(uri)); startActivity(intent); //启动调用 isOpened = true; } catch (Exception e) { isOpened = false; e.printStackTrace(); } } else { isOpened = false; } }
高德跳转如下:
/** * 打开高德地图 */ /** * * @param dlat 纬度 * @param dlon 纬度 * @param content 终点 */ private void openGaoDeMap(double dlat, double dlon, String content) { if (OpenLocalMapUtil.isGdMapInstalled()) { try { //百度地图定位坐标转换成高德地图可识别坐标 double[] loca = new double[2]; loca = OpenLocalMapUtil.gcj02_To_Bd09(dlat, dlon); String uri = OpenLocalMapUtil.getGdMapUri(APP_NAME, String.valueOf(loca[0]), String.valueOf(loca[1]), content); Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setPackage("com.autonavi.minimap"); intent.setData(Uri.parse(uri)); startActiv