android 百度地图高德地图开发

实现百度地图和高德地图导航(方式)

如图:根据第三方地图来实现不同的出行方式

第一步:首先判断手机是否安装第三方导航应用如百度地图或者是高德地图 - 没有安装则提示安装应用

 /**
     * 通过包名获取应用信息
     * @param context
     * @param packageName
     * @return
     */
    public static AppInfo getAppInfoByPak(Context context, String packageName) {
        PackageManager packageManager = context.getPackageManager();
        List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
        for (PackageInfo packageInfo : packageInfos) {
            if (packageName.equals(packageInfo.packageName)) {
                AppInfo tmpInfo = new AppInfo();
                tmpInfo.setAppName(packageInfo.applicationInfo.loadLabel(packageManager).toString());
                tmpInfo.setPackageName(packageInfo.packageName);
                tmpInfo.setVersionName(packageInfo.versionName);
                tmpInfo.setVersionCode(packageInfo.versionCode);
                tmpInfo.setAppIcon(packageInfo.applicationInfo.loadIcon(packageManager));
                return tmpInfo;
            }
        }
        return null;
    }

第二步:注意首先这里是直接设置终点名称直接导航

 /**
     * 百度地图 - 直接设置终点 - 这里的type就是选择出行的方式列如:步行,公交等
     */
    public void startNative_Baidu1(String address, String type) {
        try {
            if ("1".equals(isMuBiaoClick)){
                Intent intent = Intent.getIntent("intent://map/direction?origin=我的位置&destination="+address+"&mode="+type+"&src=yourCompanyName|yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
                startActivity(intent);
            }else if ("2".equals(isMuBiaoClick)){
                Intent intent = new Intent();
                intent.setData(Uri.parse("baidumap://map/geocoder?src=openApiDemo&address="+address));
                startActivity(intent);
            }
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(TakeMeActivity.this, "地址解析错误", Toast.LENGTH_SHORT).show();
        }
    }
/**
     * 高德地图
     */
    public void startNative_Gaode1(String address) {
        try {
            if ("1".equals(isMuBiaoClick)){
                Intent intent = Intent.getIntent("androidamap://route?sourceApplication=softname&sname=我的位置&dname="+address+"&dev=0&m=0&t=1");
                intent.setPackage("com.autonavi.minimap");
                startActivity(intent);
            }else if ("2".equals(isMuBiaoClick)){
                Intent intent = Intent.getIntent("androidamap://route?sourceApplication=softname&sname="+address+"&dev=0&m=0&t=1");
                intent.setPackage("com.autonavi.minimap");
                startActivity(intent);
            }
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(TakeMeActivity.this, "地址解析错误", Toast.LENGTH_SHORT).show();
        }
    }

ok,核心代码已经贴出,这两个方法主要就是目标位置直接进行传递(String),再由我的当前位置做为起点进行导航。

总结:这几个方面其实相对来说都比较简单,相信你肯定知道,关键点其实在于在跳转第三方应用的时候intent传递的数据怎么去写?  下面就来为大家介绍一下:

1.首先,你要知道一点知识

1.1: 导航一定有起点和终点,一般起点和终点有两种形式:

1.2:坐标一般常见的有三种火星坐标、百度坐标、高德坐标

1.3: 通过百度定位或者通过名字反编码出来的坐标都是百度坐标

1.4:导航参数中如果有坐标,坐标的优先级大于名字

2.测试大致的可分为6种

1.起点终点都是坐标使用高德

2.起点终点都是名称使用高德

3.当前位置到终点使用高德

4.起点终点都是坐标使用百度

5.起点终点都是名称使用百度

6.当前位置到终点使用百度

高德

   private static final double LATITUDE_A = 28.1903;  //起点纬度
    private static final double LONGTITUDE_A = 113.031738;  //起点经度
    private static final double LATITUDE_B = 28.187519;  //终点纬度
    private static final double LONGTITUDE_B = 113.029713;  //终点经度

高德1起点和终点的坐标如下

   /**
     * 确定起终点坐标BY高德
     */
    void setUpGaodeAppByLoca(){
        try {
            Intent intent = Intent.getIntent("androidamap://route?sourceApplication=softname&slat="+LATITUDE_A+"&slon="+LONGTITUDE_A+"&sname="+"万家丽国际Mall"+"&dlat="+LATITUDE_B+"&dlon="+LONGTITUDE_B+"&dname="+"东郡华城广场|A座"+"&dev=0&m=0&t=1");
            if(isInstallByread("com.autonavi.minimap")){
                startActivity(intent);
                Log.e(TAG, "高德地图客户端已经安装") ;
            }else {
                Log.e(TAG, "没有安装高德地图客户端") ;
            }
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

高德2起点终点都是名称

 /**
     * 确认起终点名称BY高德
     */
    void setUpGaodeAppByName(){
        try {
            Intent intent = Intent.getIntent("androidamap://route?sourceApplication=softname"+"&sname="+"万家丽国际Mall"+"&dname="+"东郡华城广场|A座"+"&dev=0&m=0&t=1");
            if(isInstallByread("com.autonavi.minimap")){
                startActivity(intent);
                Log.e(TAG, "高德地图客户端已经安装") ;
            }else {
                Log.e(TAG, "没有安装高德地图客户端") ;
            }
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

高德3第三个情况实际上是最好用的方法,如下

   /**
     * 我的位置BY高德
     */
    void setUpGaodeAppByMine(){
        try {
             Intent intent = Intent.getIntent("androidamap://route?sourceApplication=softname&sname=我的位置&dlat="+LATITUDE_B+"&dlon="+LONGTITUDE_B+"&dname="+"东郡华城广场|A座"+"&dev=0&m=0&t=1");
            if(isInstallByread("com.autonavi.minimap")){
                startActivity(intent);
                Log.e(TAG, "高德地图客户端已经安装") ;
            }else {
                Log.e(TAG, "没有安装高德地图客户端") ;
            }
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

下面的是调用百度地图app,同样通过百度拾取 取了两个位置的百度坐标

    private static final double LATITUDE_QIDIAN = 28.196744;  //起点纬度
    private static final double LONGTITUDE_QIDIAN = 113.037904;  //起点经度
    private static final double LATITUDE_ZHONGDIAN = 28.193159;  //终点纬度
    private static final double LONGTITUDE_ZHONGDIAN = 113.036427;  //终点经度
百度1使用起点和终点的坐标
    /**
     * 注意下面的起终点坐标都是百度坐标,如果使用高德坐标系有很大的误差
     */
    void setUpBaiduAPPByLoca(){
        try {
            Intent intent = Intent.getIntent("intent://map/direction?origin=latlng:"+LATITUDE_QIDIAN+","+LONGTITUDE_QIDIAN+"|name:万家丽国际Mall&destination=latlng:"+LATITUDE_ZHONGDIAN+","+LONGTITUDE_ZHONGDIAN+"|name:东郡华城广场|A座&mode=driving&src=yourCompanyName|yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
            if(isInstallByread("com.baidu.BaiduMap")){
                startActivity(intent);
                Log.e(TAG, "百度地图客户端已经安装") ;
            }else {
                Log.e(TAG, "没有安装百度地图客户端") ;
            }
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

百度2起点和终点两个名称

/**
     * 通过起终点名字使用百度地图
     */
    void setUpBaiduAPPByName(){
        try {
            Intent intent = Intent.getIntent("intent://map/direction?origin=万家丽国际Mall&destination=东郡华城广场|A座&mode=driving&src=yourCompanyName|yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
            if(isInstallByread("com.baidu.BaiduMap")){
                startActivity(intent);
                Log.e(TAG, "百度地图客户端已经安装") ;
            }else {
                Log.e(TAG, "没有安装百度地图客户端") ;
            }
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

百度3当前位置到终点导航规划路线

   /**
     * 我的位置到终点通过百度地图
     */
    void setUpBaiduAPPByMine(){
        try {
            Intent intent = Intent.getIntent("intent://map/direction?origin=我的位置&destination=东郡华城广场|A座&mode=driving&src=yourCompanyName|yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
            if(isInstallByread("com.baidu.BaiduMap")){
                startActivity(intent);
                Log.e(TAG, "百度地图客户端已经安装") ;
            }else {
                Log.e(TAG, "没有安装百度地图客户端") ;
            }
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }
总结:ok,这里相信你对intent里面的数据传递会有更好的理解。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值