Android 中如何检查应用程序是否为非系统应用程序?

2024-01-04

我收到一份清单ApplicationInfo对象与packageManager.getInstalledApplications(0) http://developer.android.com/reference/android/content/pm/PackageManager.html#getInstalledApplications%28int%29并尝试根据它们是否是系统应用程序对它们进行分类。

我已经使用所描述的技术有一段时间了here https://stackoverflow.com/questions/6043621/how-can-i-dynamically-detect-whether-my-applicatiion-is-system-or-normal/6044499#comment10955328_6044499,但是在我的应用程序中看到,有些应用程序不在非系统应用程序列表中(例如Facebook,当可用时要求系统将其自身安装到 SD 卡上)。接下来阅读实际文档后应用程序信息.FLAG_SYSTEM http://developer.android.com/reference/android/content/pm/ApplicationInfo.html#FLAG_SYSTEM,并了解它实际上并不过滤系统应用程序,我现在正在寻找一种新方法。

我的猜测是,系统和非系统应用程序的 UID 之间存在很大差距,我可以收集这些差距来进行区分,但到目前为止我还没有找到答案。我还研究了其他标志,例如ApplicationInfo.FLAG_EXTERNAL_STORAGE,但是我支持 API 1.5。

有没有人有真正的解决方案(不涉及FLAG_SYSTEM)?


PackageManager pm = mcontext.getPackageManager();
List<PackageInfo> list = pm.getInstalledPackages(0);

for(PackageInfo pi : list) {
    ApplicationInfo ai = pm.getApplicationInfo(pi.packageName, 0);

    System.out.println(">>>>>>packages is<<<<<<<<" + ai.publicSourceDir);

    if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
        System.out.println(">>>>>>packages is system package"+pi.packageName);          
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中如何检查应用程序是否为非系统应用程序? 的相关文章

随机推荐