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

标签 android system uid android-applicationinfo

我得到一个带有 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/

相关文章:

java - 如何修改 MediaRecorder 源以允许暂停/恢复录制

architecture - 设计措施(备份除外)来确保文件系统的可靠性和完整性?

java - 固定长度的唯一Id创建

java - Android - Facebook 是否打算访问某个 Facebook 页面?

android - Facebook Android SDK 未返回所有个人资料信息

matlab - 在 Matlab 中使用系统函数不起作用

haskell - 将系统命令的结果绑定(bind)到 Haskell 中的变量

android - Android系统uid为0是什么意思

android - 将 *.lm 转换为 *.dmp 文件以构建语音识别的语言模型