问题
最近项目需要实现一个这样的功能:点击位置信息,调用手机上安装的地图软件,进行导航(效果图见上图)
然后就是一顿百度.....
还好找到了解决办法,其实很简单,因为常用的地图软件开放的都有相关api,
我们再开发的过程中直接调用就可以了
下面的是代码,可以直接复制粘贴使用
注:底部弹框使用的是xPopup开源库,很好用,推荐给大家
工具类
作用:为了遍历手机上安装的所有软件,看看是否安装的有相关地图软件
public class isAvilibleUitls {
// 检索地图软件
public static boolean isAvilible(Context context, String packageName) {
//获取packagemanager
final PackageManager packageManager = context.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);
}
/**
* 指定地图
* 百度地图包名:com.baidu.BaiduMap
* <p>
* 高德地图包名:com.autonavi.minimap
* <p>
* 腾讯地图包名:com.tencent.map
* <p>
* 谷歌地图 com.google.android.apps.maps
*/
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<String> hasMap(Context context) {
List<String> mapsList = mapsList();
List<String> backList = new ArrayList<>();
for (int i = 0; i < mapsList.size(); i++) {
boolean avilible = isAvilible(context, mapsList.get(i));
if (avilible) {
backList.add(mapsList.get(i)