检索android是否安装某个APP

今天和大家分享如何判断手机上是否安装了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();  
    }   
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值