android 跳转百度、高德、腾讯地图导航和周边功能实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013144287/article/details/79531653
android 跳转百度、高德、腾讯地图导航和周边功能实现

       开发app时候,地图跳转是很常见的一个功能,告诉你经纬度就可以实现唤醒百度、高德、腾讯地图进行地图导航,在加上关键字就可以实现周边功能的实现,前台需要动态判断手机上安装了哪些地图软件,若有则显示出来,没有则不显示,若用户手机上没有安装任何导航软件app,则需要引导用户去下载一款地图app软件。由于我这是h5开发环境,所以界面由h5处理,只提供后台的两个接口,一个接口是判断用户手机上安装了哪些导航软件,一个接口是进行地图导航和周边功能的实现。然后js调android即可实现

一、api地址

1、百度地图 http://lbsyun.baidu.com/index.php?title=uri/api/android

2、高德地图 http://lbs.amap.com/api/amap-mobile/guide/android/route

3、腾讯地图 http://lbs.qq.com/uri_v1/index.html

二、android后台接口提供给前台h5调用如下:

/**
     * 选择地图
     * @param lat 纬度
     * @param lon 经度
     * @param poiname 地址
     * @param type 1表示高德  2表示百度  3表示腾讯
     * @param selectType 1表示导航类型, 2表示周边类型
     * @param keyWords 关键字
     * @param poiname
     */
    @JavascriptInterface
    public void makeUpMap (String lat,String lon,String poiname,int type,int selectType,String keyWords) {
        Intent intent = new Intent();
        if (mapBean.getGaoDei() == null && mapBean.getTenXun() == null && mapBean.getBaiDu() == null) {
            goToMarket(mContext, "com.autonavi.minimap");
            mContext.startActivity(intent);
        }
        //高德地图
        if (mapBean.getGaoDei() == "1" && type == 1) {
            if (selectType == 1) {
                intent.setData(Uri.parse("androidamap://viewMap?sourceApplication=appname&poiname=" + poiname + "&lat=" + lat +"&lon="+ lon +"&dev=0"));
            } else if (selectType == 2) {
                intent.setData(Uri.parse("androidamap://arroundpoi?sourceApplication=softname&keywords="+ keyWords +"&lat=" + lat + "&lon="+ lon + "&dev=0"));
            }
        }
        //百度地图
        if (mapBean.getBaiDu() == "2" && type == 2) {
            if (selectType == 1) {
                intent.setData(Uri.parse("baidumap://map/marker?location=" + lat + ","+  lon + "&title=" + poiname + "&content="+ "" +"&traffic=on"));
            } else if (selectType == 2) {
                intent.setData(Uri.parse("baidumap://map/place/nearby?query="+ keyWords +"¢er=" + lat + "," + lon + ""));
            }
        }
        //腾讯地图
        if (mapBean.getTenXun() == "3" && type == 3) {
            if (selectType == 1) {
                intent.setData(Uri.parse("http://apis.map.qq.com/uri/v1/marker?marker=coord:"+ lat + "," + lon + ";" + "title:" + poiname + ";addr:" + " " + "&referer=myapp"));
            } else if (selectType == 2) {
                intent.setData(Uri.parse("http://apis.map.qq.com/uri/v1/search?keyword="+ keyWords +"¢er="+ lat + "," + lon +"&radius=5000&referer=myapp"));
            }
        }
        mContext.startActivity(intent);
    }
    /**
     * 判断手机地图是否安装  高德地图:com.autonavi.minimap 百度地图:com.baidu.BaiduMap 腾讯地图
     *
     * @return
     */
    @JavascriptInterface
    public String isInstallByread() {
        mapBean = new MapBean();
        //高德地图
        if(new File("/data/data/" + "com.autonavi.minimap").exists()) {
            mapBean.setGaoDei("1");
        }
        //百度地图
        if (new File("/data/data/" + "com.baidu.BaiduMap").exists()) {
            mapBean.setBaiDu("2");
        }
        //腾讯地图
        if (new File("/data/data/" + "com.tencent.map").exists()) {
            mapBean.setTenXun("3");
        }
        //google地图
//        if (new File("/data/data/" + "com.google.android.apps.maps").exists()) {
//            mapBean.setGoogleMap("4");
//        }
        return new Gson().toJson(mapBean);
    }


    /**
     * 去市场下载页面
     */
    public void goToMarket(Context context, String packageName) {
        Uri uri = Uri.parse("market://details?id=" + packageName);
        Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
        try {
            context.startActivity(goToMarket);
        } catch (ActivityNotFoundException e) {
        }
    }

所使用到的实体类是:

**
 * Created by zhaoyihuan on 2018/3/8.
 */

public class MapBean {
    String baiDu;
    String gaoDei;
    String tenXun;

    public String getTenXun() {
        return tenXun;
    }

    public void setTenXun(String tenXun) {
        this.tenXun = tenXun;
    }

    public String getBaiDu() {
        return baiDu;
    }

    public void setBaiDu(String baiDu) {
        this.baiDu = baiDu;
    }

    public String getGaoDei() {
        return gaoDei;
    }

    public void setGaoDei(String gaoDei) {
        this.gaoDei = gaoDei;
    }

}
调用肯定是用webview来调用,那后台接口就到此结束了。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页