//1.百度地圖包名
public static final String BAIDUMAP_PACKAGENAME = "com.baidu.BaiduMap";
//2.高德地圖包名
public static final String AUTONAVI_PACKAGENAME = "com.autonavi.minimap";
//3.騰訊地圖包名
public static final String QQMAP_PACKAGENAME = "com.tencent.map";
使用packageManager檢查應用安裝了那些地圖軟體
private static final String[] MAP_PACKAGES = {BAIDUMAP_PACKAGENAME, AUTONAVI_PACKAGENAME, QQMAP_PACKAGENAME};
List<String> packages = checkInstalledPackage(MAP_PACKAGES);
/**
* 檢查手機上是否安裝了指定的軟體
*
* @param packageNames 可變參數 String[]
* @return 目标軟體中已安裝的清單
*/
public static List<String> checkInstalledPackage(String... packageNames) {
//擷取packageManager
final PackageManager packageManager = sContext.getPackageManager();
//擷取所有已安裝程式的包資訊
List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
//用于存儲
List<String> newPackageNames = new ArrayList<>();
int count = packageNames.length;
if (packageInfos != null && packageInfos.size() > 0) {
outermost:for (String packageName : packageNames) {
for (int i = 0; i < packageInfos.size(); i++) {
String packageInfo = packageInfos.get(i).packageName;
if (packageInfo.contains(packageName)) {
newPackageNames.add(packageName);
if (newPackageNames.size() == count) {
break outermost;//這裡使用了循環标記,跳出外層循環
}
}
}
}
}
//判斷packageNames中是否有目标程式的包名,有TRUE,沒有FALSE
return newPackageNames;
}
如果packages.size() == 0 表明未安裝高德、百度、騰訊地圖
不為0則switch進行調用
if (packages.size() == 0) {
MyToast.show("請安裝地圖應用", Toast.LENGTH_LONG);
} else {
for (String packageName : packages) {
switch (packageName) {
case BAIDUMAP_PACKAGENAME:
invokeBaiDuMap(context, arg);
break;
case AUTONAVI_PACKAGENAME:
invokeAuToNaveMap(context, arg);
break;
case QQMAP_PACKAGENAME:
invokeQQMap(context, arg);
break;
}
}
}