跳至主要内容

博文

目前显示的是标签为“GET_UNINSTALLED_PACKAGES”的博文

[Skill]getApplicationInfo的坑

getApplicationInfo的坑 一般情况下我们通过PackageManager.GET_UNINSTALLED_PACKAGES来检查应用是否安装,且不论其本身存在的不正确性,自Android 4.2(API 17)以后,多账户的出现,其又新出现一些坑。现在Android 7.0(API 24)使用MATCH_UNINSTALLED_PACKAGES 将其替换。 问题描述 在做微信分享操作之前,应用内先对微信App进行一次判断是否安装,使用的方法: public boolean checkApkExist( Context context, String packageName) { try { ApplicationInfo info = context . getPackageManager() . getApplicationInfo(packageName, PackageManager . GET_UNINSTALLED_PACKAGES ); if (info != null ) return true ; } catch ( PackageManager . NameNotFoundException e) { return false ; } return false ; } 在我的设备上存在两个账户,一个管理员账户用于日常使用,另一个普通账户用于开发,在我的管理员账户中安装了微信,而普通账户里面没有安装微信,但是在普通账户里运行这段代码,其会告诉你安装了微信。 问题分析 从API 24的源码可以看到,其实GET_UNINSTALLED_PACKAGES标志仅仅用于查询在手机系统分区存在数据目录的应用: /** * @deprecated replaced with {@link #MATCH_UNINSTALLED_PACKAGES} */ @Deprecated public static final int GET_UNINSTALLED_PACKAGES = 0x00002000; /** * Flag param...