Android之调用高德地图或百度地图原生app

今天做一个路径规划的功能,需要使用到高德地图,或是百度地图,然后想着怎样的实现比较好。刚好也在看前程无忧,它里面就是点击导航的话会先检查本机是否安装了这些地图app,如果有的话,就直接打开使用,没有的话就通过浏览器去打开百度的web地图进行路径规划。

主要的流程是这样,先判断是否安装了高德地图,有的话就打开高德地图app;否则就判断是否有百度地图;否的话就直接用浏览器跳转到高德地图的网页做路径规划:

if(PackageManagerUtil.haveGaodeMap()){
                        openGaodeMapToGuide();
                    } else if(PackageManagerUtil.haveBaiduMap()){
                       openBaiduMapToGuide();
                    }else {
                        openBrowserToGuide();
                    }

相应地图的调用都有它们自己的写法,可以去官网上查阅。我这里有些是少了个起点,因为我的起点是定位获得的,如果我不写的话,它们会默认起点是定位的位置。

 private void openBaiduMapToGuide() {
        Intent intent = new Intent();
        double[] location = GPSUtil.gcj02_To_Bd09(locationX , locationY);
        String url = "baidumap://map/direction?" +
                "destination=name:"+storeName+"|latlng:"+location[0] + "," + location[1]+
				"&mode=transit&sy=3&index=0&target=1";
        Uri uri = Uri.parse(url);
        //将功能Scheme以URI的方式传入data
        intent.setData(uri);
        //启动该页面即可
        startActivity(intent);
    }

    private void openGaodeMapToGuide() {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        String url = "androidamap://route?sourceApplication=amap&slat="+currLocationX+"&slon="+currLocationY
                +"&dlat="+locationX+"&dlon="+locationY+"&dname="+storeName+"&dev=0&t=1";
        Uri uri = Uri.parse(url);
        //将功能Scheme以URI的方式传入data
        intent.setData(uri);
        //启动该页面即可
        startActivity(intent);
    }



    private void openBrowserToGuide() {
        String url = "http://uri.amap.com/navigation?to=" + locationY + "," + locationX + "," + 
		storeName + "&mode=car&policy=1&src=mypage&coordinate=gaode&callnative=0";
        Uri uri = Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
    }

public class PackageManagerUtil {

    private static PackageManager mPackageManager = TheApp.instance.getPackageManager();
    private static List<String> mPackageNames = new ArrayList<>();
    private static final String GAODE_PACKAGE_NAME = "com.autonavi.minimap";
    private static final String BAIDU_PACKAGE_NAME = "com.baidu.BaiduMap";


    private static void initPackageManager(){

        List<PackageInfo> packageInfos = mPackageManager.getInstalledPackages(0);

        if (packageInfos != null) {
            for (int i = 0; i < packageInfos.size(); i++) {
                mPackageNames.add(packageInfos.get(i).packageName);
            }
        }
    }

    public static boolean haveGaodeMap(){
        initPackageManager();
        return mPackageNames.contains(GAODE_PACKAGE_NAME);
    }

    public static boolean haveBaiduMap(){
        initPackageManager();
        return mPackageNames.contains(BAIDU_PACKAGE_NAME);
    }
}

注:因为我这里一开始的坐标是高德地图的坐标,而它是不能用在百度地图上的,因为两家采用的标准不一样,所以需要我们将高德地图的坐标转换成百度地图使用的坐标。具体的转换工具方法参考下方的引用。

参考:

百度地图和高德地图坐标系的互相转换

高德地图URI路径规划

高德地图app路径规划调用

百度地图URI API

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AppInventor 是一个可以帮助用户快速创建 Android 应用程序的在线开发工具。而高德地图是一个提供地图相关服务的第三方平台。要在AppInventor中调用高德地图组件进行下载,首先需要进行一些准备工作。 1. 注册高德开发者账号:在高德开放平台注册账号,获取高德地图的相关API。 2. 创建AppInventor项目:在AppInventor中创建一个新项目,命名为“高德地图下载”。 3. 导入高德地图组件:进入AppInventor的设计界面,在右侧的组件面板找到“导入扩展”按钮,点击后在搜索框中输入“高德地图”,找到相关的组件并导入。 接下来是具体实现步骤: 4. 添加地图组件:拖拽“地图”组件到设计界面,可点击组件进行基本设置,如地图的样式、位置等。 5. 添加下载按钮:在设计界面中添加一个按钮控件,命名为“下载地图”。 6. 编写代码:在代码编辑界面,编写相关的代码实现地图的下载功能。代码示例可能如下: ``` 当“下载地图”按钮被点击时: 获取地图当前的区域范围 调用高德地图API,将区域范围作为参数进行下载 ``` 7. 测试应用:连接手机设备,点击“连接”按钮,在AI Companion中扫描二维码下载应用。安装并运行应用,测试地图下载功能是否正常。 以上是使用AppInventor调用高德地图组件进行下载的大致步骤。具体实现还需要根据具体需求来进行调整和完善。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值