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