美文网首页
Android 判断手机是否安装某个应用

Android 判断手机是否安装某个应用

作者: 一只特立独行的史努比 | 来源:发表于2019-03-18 17:09 被阅读0次

    第一种方法

    通过Application拿到PackageManager,然后通过PackageManager的getInstalledPackages(int flags)获取到安装应用列表的PackageInfo,遍历看是否有某应用包名来判断是否安装了某应用。

        publicbooleanisWxInstall(){ PackageManager packageManager =     MyApplication.getInstance().getPackageManager(); List pinfo =     packageManager.getInstalledPackages(0);if(pinfo !=null) {for(inti =0; i < pinfo.size(); i++) { String pn =     pinfo.get(i).packageName;if(pn.equals("com.tencent.mm")) {returntrue; } } }returnfalse; }

    如果禁止读取获取已安装应用列表权限后,上述方法可能会导致实际的结果不正确,于是分别找了vivo、华为和小米手机进行了验证。

     验证

    *  vivo x9 X7Funtouch OS_3.1 android 7.1.2 华为

    * HUAWEI Mate10 Pro EMUI 8.0.0 android 8.0.0

    * MI 5 MIUI 9.5.2.0 android 7.0

    因为国内厂商的这个读取已安装应用列表的权限在被禁了以后,第三方应用的PackageInfo用getInstalledPackages()方法是获取不到的。

    第二种方法

        publicbooleanisWxInstall2(){ PackageManager packageManager =     MyApplication.getInstance().getPackageManager(); String packageName     ="com.tencent.mm";booleanhasInstallWx;try{ PackageInfo packageInfo =     packageManager.getPackageInfo(packageName,PackageManager.GET_GIDS); hasInstallWx =     packageInfo !=null; }catch(PackageManager.NameNotFoundException e) { hasInstallWx =false;     e.printStackTrace(); }returnhasInstallWx; }

    这种方案用的是PackageManager里的getPackageInfo()方法,该方法不能获得已安装应用的列表,但是可以获得指定包名的PackageInfo,当指定包名的PackageInfo不存在的时候,系统会抛出PackageManager.NameNotFoundException异常,可以以此为依据来进行判断系统是否安装某应用。

    同样,Android原生系统用上述方法是肯定能够获得正确结果的,但不知道国内手机厂商的ROM是否对该方法也进行了修改,于是用上述三部手机分别进行了验证,得到的结果是一样的。在禁止读取已安装列表权限以后,能够获得正确的结果。

    就目前手机厂商的ROM来说,用上述方案是能够正确获得手机是否安装某应用的。

    相关文章

      网友评论

          本文标题:Android 判断手机是否安装某个应用

          本文链接:https://www.haomeiwen.com/subject/vgjbmqtx.html