weex android跳转到外部地图导航

2020-10-16 15:10:04 阅读:6 编辑

js/pages/system/openlocation.vue

<template>
   <div>
       <w-map :latitude="lnglat.latitude" :longitude="lnglat.longitude"
              style="position: fixed;left: 0;right: 0;top: 0;bottom: 0" v-if="show"></w-map>
       <div style="width:200px;height:174px;position: fixed;right:0;bottom: 0;background-color: transparent;" @click="toMap">
           <text style="font-size: 50px;text-align: right"></text>
       </div>
   </div>

</template>
<script>
    import wx from './../common/wx.js';
    import wmap from "./../common/components/api-map";
    export default {
        components: {
            "w-map": wmap,
        },
        data: function () {
            return {
                lnglat: {},
                point: {
                    pos: [],
                    title: 'this is a marker',
                },
                show: false,
            };
        },
        mixins: [require('./../common/publish').publish],
        methods: {
            getAddress(lng, lat, callback) {
                wx.getAppConfig(function (config) {
                    var key = config.tmap;
                    var url = "https://apis.map.qq.com/ws/geocoder/v1/?location=" + lat + "," + lng + "&key=" + key;
                    wx.request({
                        url: url,
                        success: function (res) {
                            var data = res.data;
                            var address = data.result.address_component.district + data.result.address_component.street;
                            callback(address);
                            //wx.alert(res);
                        }
                    })
                });
            },
            toMap(){
                var that = this;
                that.getAddress(that.lnglat.longitude, that.lnglat.latitude, function (address) {
                    var siteinfo = weex.requireModule('siteinfo');
                    var info = {
                        lng: that.lnglat.longitude,
                        lat: that.lnglat.latitude,
                        start: "我的位置",
                        end: address,
                    };
                    var result = siteinfo.openMap(info);
                    if (result != "ok") {
                        if (result == "NO_INSTALL_APP") {
                            wx.alert("请先安装高德地图");
                        } else {
                            wx.alert(result);
                        }

                    }
                });
            }
        },
        created: function () {
            this.data = this.$data;
            var params = this.getRouterParams();
            this.lnglat = params;
            this.point.pos = this.lnglat;
            this.show = true;

        },
        mounted: function () {
           /* var that = this;
            var navigator = weex.requireModule('bmNavigator')
            navigator.setRightItem({
                text: '导航',
            }, function () {

            });*/
        },
    };
</script>

<style scoped>
    .container {
        flex: 1;
        min-height: 600px;
        background-color: #eee;
    }

    .map {
        flex: 1;
        min-height: 600px;
    }

</style>
com/benmu/pluginsimple/ErosPluginSimple.java
    @JSMethod(uiThread = false)
    public String getMapList() {
        String result = "";
        if(isInstallPackage("com.autonavi.minimap")){
            result = result + "daoge";
        }
        if(isInstallPackage("com.tencent.map")){
            if(result.equals("")){
                result = "tencent";
            }else{
                result = result + ",tencent";
            }
        }
        return result;
    }
    @JSMethod(uiThread = false)
    public String openMap(String params) {

        try {

            JSONObject obj = new JSONObject(params);
            String map_type = obj.getString("map_type");
            if(map_type.equals("daoge")){
                if(isInstallPackage("com.autonavi.minimap")){
                    openGaoDeMap(obj.getDouble("lng"), obj.getDouble("lat"),obj.getString("start"),obj.getString("end"));
                    return "ok";
                }else{
                    return "NO_INSTALL_APP";
                }
            }else{
                if(isInstallPackage("com.tencent.map")){
                    openTencentMap(obj.getDouble("lng"), obj.getDouble("lat"),obj.getString("start"),obj.getString("end")
                        ,obj.getString("tencent_key"));
                    return "ok";
                }else{
                    return "NO_INSTALL_APP";
                }
            }

        } catch (Throwable t) {
            return "请求参数出错";
        }

    }

    private boolean isInstallPackage(String packageName) {
        return new File("/data/data/" + packageName).exists();
    }

    private void openGaoDeMap(double lon, double lat, String start, String end) {
        try {
            //double[] gd_lat_lon = [lat,lon];//bdToGaoDe(lon, lat);
            StringBuilder loc = new StringBuilder();
            loc.append("androidamap://route/plan?sourceApplication=softname");
            loc.append("&sname=");
            loc.append(start);
            loc.append("&dlat=");
            loc.append(lat);
            loc.append("&dlon=");
            loc.append(lon);
            loc.append("&dname=");
            loc.append(end);
            loc.append("&dev=0&t=0");
            Intent intent = Intent.getIntent(loc.toString());
            Activity activity = (Activity )mWXSDKInstance.getContext();
            activity.startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private void openTencentMap(double lon, double lat, String start, String end,String tencent_key) {
        try {
            //double[] gd_lat_lon = [lat,lon];//bdToGaoDe(lon, lat);
            StringBuilder loc = new StringBuilder();
            loc.append("qqmap://map/routeplan?type=drive&fromcoord=CurrentLocation");
            loc.append("&from=");
            loc.append(start);
            loc.append("&tocoord=");
            loc.append(lat);
            loc.append(",");
            loc.append(lon);
            loc.append("&to=");
            loc.append(end);
            loc.append("&referer=");
            loc.append(tencent_key);
            Intent intent = Intent.getIntent(loc.toString());
            Activity activity = (Activity )mWXSDKInstance.getContext();
            activity.startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }