今天和大家分享如何判断手机上是否安装了XXX.apk。
因为国外项目在打开地图的时候一定要使用gGoogle map,像这种打开第三方软件的,android都会采用Intent进行跳转,然后根据ACTION判断类型,弹出一个选项框。但是客户非要指定Google map,所以在跳转的时候就要进行筛选,其实就是根据APK的包名进行筛选以Google map 为例~
Google map的包名为com.google.android.apps.maps,如果你想知道其他的,直接百度下就好了。值得注意的是,如果手机上没存在Google map,程序会崩溃。所以在做的时候得规避下这种错误,抛出一个Tomast。
if (checkApkExist(getActivity(),
"com.google.android.apps.maps")) {
Intent i = new Intent(
Intent.ACTION_VIEW,
Uri.parse("http://ditu.google.cn/maps?hl=zh&mrt=loc&q="
+ (Double
.parseDouble(mLocation
.getLongitude())
+ "," + Double
.parseDouble(mLocation
.getLongitude()))));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
& Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
i.setClassName(
"com.google.android.apps.maps",
"com.google.android.maps.MapsActivity");
startActivity(i);
} else {
Toast.makeText(getActivity(),
"Please download google map",
Toast.LENGTH_LONG);
}
boolean checkApkExist(Context context, String packageName) {
if (packageName == null || "".equals(packageName)) {
return false;
}
try {
context.getPackageManager().getApplicationInfo(packageName,
PackageManager.GET_UNINSTALLED_PACKAGES);
return true;
} catch (NameNotFoundException e) {
return false;
}
}
另附上一个检索所有的APK的代码:
final PackageManager packageManager = getActivity().getPackageManager();//获取packagemanager
List< PackageInfo> pinfo = packageManager.getInstalledPackages(0);//获取所有已安装程序的包信息
if(pinfo != null){
for(int i = 0; i < pinfo.size(); i++){
String packName = pinfo.get(i).packageName;
Log.d("info", "-->"+packName);
}
}
再写文章的时候又想起是否要检测下是否在sd卡上,所以又从网上找到了一段代码:
private void isInstallOnSd(Context context,String name){
PackageManager pm=context.getPackageManager();
ApplicationInfo appInfo;
try {
appInfo = pm.getApplicationInfo(name, 0);
if ((appInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
// App on sdcard
Log.d("info", "app on sd");
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u013651405/article/details/46819559