美文网首页Android开发Android开发经验谈Android技术知识
Android 开发中的代码片段(3)地图操作相关

Android 开发中的代码片段(3)地图操作相关

作者: AndroidRookie | 来源:发表于2018-09-15 23:01 被阅读15次

    前言

    收集常用的代码块,留存记录。此次代码块包含:唤起高德地图导航、唤起百度地图导航

    代码

    判断手机内安装的地图

    /**判断是否安装目标应用*/
    private boolean isInstallByread(String packageName) {
        return new File("/data/data/" + packageName)
                .exists();
    }
    
    /**
     * 判断和打开地图
     */
    public void navigationMap() {
        //1.两个地图都安装了,让用户选择
        boolean installBaidu = isInstallByread("com.baidu.BaiduMap");
        boolean installAmap = isInstallByread("com.autonavi.minimap");
        if (installBaidu && installAmap) {//两个地图都安装了 让用户进行选择
            showSelectMap();
        } else if (installBaidu) {//安装了百度地图
            startBaiduMap();
        } else if (installAmap) {//安装了高德地图
            startAmapMap();
        } else {//两个地图都没安装,使用web Api进行导航,不建议实现
            //startWebMap();
            T.showToast(mActivity, "您的手机未安装高德地图或者百度地图");
        }
    }
    

    唤起高德地图导航(驾车)

    /**
     * 唤起高德地图
     */
    private void startAmapMap() {
        try {
            Intent intent = new Intent("android.intent.action.VIEW",
                    android.net.Uri.parse("androidamap://route?sourceApplication=导航demo" +
                            "&dlat=" + mEndLat +
                            "&dlon=" + mEndLng +
                            "&dname=" + name +
                            "&dev=0&t=2"));
            intent.setPackage("com.autonavi.minimap");
            mActivity.startActivity(intent);
        } catch (Exception e) {
            T.showToast(mActivity, "调起高德地图失败");
        }
    }
    

    相关参数:

    参数 说明 是否必填
    sourceApplication 当前app的名字
    dlat 纬度
    dlon 经度
    name 终点的名称
    dev 是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密)
    t 导航方式:

    0 速度快
    1 费用少
    2 路程短;
    3 不走高速
    4 躲避拥堵
    5 不走高速且避免收费
    6 不走高速且躲避拥堵
    7 躲避收费和拥堵
    8 不走高速躲避收费和拥堵

    效果如下:

    高德地图驾车导航演示

    唤起百度地图导航(驾车)

    /**
     * 移动APP调起Android百度地图方式
     */
    private void startBaiduMap() {
        try {
            Intent intent = new Intent();
            intent.setData(Uri.parse("baidumap://map/direction?destination=name:" + name + "|" +
                    "latlng:" + mEndLat + "," + mEndLng + "&mode=driving&car_type=TIME"));
            mActivity.startActivity(intent); // 启动调用
        } catch (Exception e) {
            T.showToast(mActivity, "调起百度地图失败");
        }
    
    }
    

    相关参数:

    参数 说明
    destination 目的地名称
    latlng 纬度,进度 拼接字符串
    mode 导航模式:
    transit(公交)
    driving(驾车)
    walking(步行)
    riding(骑行)
    car_type 驾车路线规划类型:

    BLK:躲避拥堵(自驾)
    TIME:高速优先(自驾)
    DIS:不走高速(自驾)
    FEE:少收费(自驾)
    DEFAULT: 默认偏好;
    默认使用地图中已保存的路线偏好(缺省值)。

    除缺省值外,若用户已勾选车牌限行,其他类型都会默认增加车牌限行的偏好。

    最后

    本文只写了驾车相关的导航实例,剩余的公交、步行、骑行可参考官方文档。

    官方文档:

    未完待续、后续补充!
    我的博客地址

    相关文章

      网友评论

        本文标题:Android 开发中的代码片段(3)地图操作相关

        本文链接:https://www.haomeiwen.com/subject/kuxxnftx.html