如何在Android上准确获取“未知源”应用程序列表?

如何在Android上准确获取“未知源”应用程序列表?,android,Android,如何在Android上获得确切的未知源应用程序列表? 国旗是用来做什么的?如果不是这个方法,其他方法是什么?和 如何编程 PackageManager pm = this.getPackageManager(); final List<PackageInfo> appinstalled = pm .getInstalledPackages(what is flag??); // 对不起,我的英语不好。 谢谢。其他人可能有更好的解决方案,但这里

如何在Android上获得确切的未知源应用程序列表? 国旗是用来做什么的?如果不是这个方法,其他方法是什么?和 如何编程

    PackageManager pm = this.getPackageManager();
    final List<PackageInfo> appinstalled = pm
            .getInstalledPackages(what is flag??); //
对不起,我的英语不好。
谢谢。

其他人可能有更好的解决方案,但这里是我能想到的最好的解决方案

遍历所有已安装的包,将每个包与具有良好签名的已知良好包进行比较,其中包括checkSignaturesint、int或checkSignaturesString、String。如果checkSignatures的返回值是SIGNATURE\u UNKNOWN\u PACKAGE,那么您就得到了一个来自未知源的包


否则,getInstalledPackages的任何标志看起来都不是用来过滤未知源的。

我知道这是一篇老文章,但我认为以下答案可能会对您有所帮助:

public static List<String> getAppsFromUnknownSources(Context context)
{
  List<String> apps = new ArrayList<>();
  PackageManager packageManager = context.getPackageManager();
  List<PackageInfo> packList = packageManager.getInstalledPackages(0);
  for (int i = 0; i < packList.size(); i++)
  {
     PackageInfo packInfo = packList.get(i);
     boolean hasEmptyInstallerPackageName = packageManager.
         getInstallerPackageName(packageInfo.packageName) == null;
     boolean isUserInstalledApp = (packageInfo.applicationInfo.flags &
         ApplicationInfo.FLAG_SYSTEM) == 0;

     if (hasEmptyInstallerPackageName && isUserInstalledApp)
     {
        apps.add(packInfo.packageName);
     }
  }

  return apps;
}