主流导航软件的包名
- 百度导航: 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'
},
]
手机展示结果: