我得到一个带有 packageManager.getInstalledApplications(0) 的 ApplicationInfo
对象列表并尝试根据它们是否为系统应用程序对其进行分类。
一段时间以来,我一直在使用 here 所描述的技术。 ,但是在我的应用程序中看到之后,一些应用程序不在非系统应用程序列表中(例如 Facebook,它在可用时要求系统将自身安装在 SD 卡上)。在接下来阅读 ApplicationInfo.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);
}
}
关于android - 如何检查应用程序是否是 Android 中的非系统应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8784505/