android 检测手机的导航软件

108 阅读1分钟

主流导航软件的包名

  • 百度导航: com.baidu.BaiduMap
  • 腾讯导航: com.tencent.map
  • 高德导航: com.autonavi.minimap

android打包前在AndroidManifest.xml里把下面的代码加进去;如果不添加检查不到导航软件

    <queries>
        <package android:name="com.baidu.BaiduMap" />
        <package android:name="com.autonavi.minimap" />
        <package android:name="com.tencent.map" />
    </queries>

查询手机已安装的导航软件

    // 导航列表
    private void MapSoftwareList(CallbackContext callbackContext) {
        List<Object> mapsList = this.hasMap();
        JSONObject returnObj = new JSONObject();
        System.out.println("地图列表");
        System.out.println(mapsList);
        try {
          returnObj.put("status", "success");
          returnObj.put("value", mapsList);
        } catch (JSONException e) {
          e.printStackTrace();
        }
        callbackContext.success(returnObj);
    }
    // 检查有没有程序包
    public  boolean isAvilible(String packageName){
        //获取packagemanager
        final PackageManager packageManager = this.cordova.getActivity().getPackageManager();
        //获取所有已安装程序的包信息
        List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
        //用于存储所有已安装程序的包名
        List<String> packageNames = new ArrayList<String>();
        //从pinfo中将包名字逐一取出,压入pName list中
        if(packageInfos != null){
            for(int i = 0; i < packageInfos.size(); i++){
              String packName = packageInfos.get(i).packageName;
              packageNames.add(packName);
            }
        }
        //判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE
        return packageNames.contains(packageName);
    }


    public List<String> mapsList (){
      List<String> maps = new ArrayList<>();
      maps.add("com.baidu.BaiduMap");
      maps.add("com.autonavi.minimap");
      maps.add("com.tencent.map");
      return maps;
    }

    // 检索筛选后返回
    public  List<Object> hasMap (){
        List<String> mapsList = mapsList();
        List<Object> backList = new ArrayList<>();
        for (int i = 0; i < mapsList.size(); i++) {
            boolean avilible = isAvilible(mapsList.get(i));
            JSONObject returnObj = new JSONObject();
            if (avilible){
               if (mapsList.get(i) == "com.baidu.BaiduMap") {
                   try {
                     returnObj.put("text", "百度地图");
                     returnObj.put("type", "baidu");
                   } catch (JSONException e) {
                     e.printStackTrace();
                   }
                   backList.add(returnObj);
               }
               if (mapsList.get(i) == "com.autonavi.minimap") {
                  try {
                     returnObj.put("text", "高德地图");
                     returnObj.put("type", "gaode");
                   } catch (JSONException e) {
                     e.printStackTrace();
                   }
                   backList.add(returnObj);
               }
               if (mapsList.get(i) == "com.tencent.map") {
                   try {
                     returnObj.put("text", "腾讯地图");
                     returnObj.put("type", "tengxun");
                   } catch (JSONException e) {
                     e.printStackTrace();
                   }
                   backList.add(returnObj);
               }
//             backList.add(mapsList.get(i));
            }
        }
        return backList;

    }
    

MapSoftwareList方法返回结果

    [
        {
            text: '腾讯地图',
            type: 'tengxun'
        },
        {
            text: '高德地图',
            type: 'gaode'
        },
    ]

手机展示结果:

image.png