Android 获取非 Play 商店应用列表
Android get list of non Play Store apps
作为一项安全措施,我想获取未从 Play 商店安装的应用列表。有没有办法做到这一点?
packageManager
包含一个方法 getInstalledApplications
但我不知道要添加哪些标志来获取列表。任何帮助将不胜感激。
编辑:这是 v4_adi 的答案的代码示例。
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);
if (packageManager.getInstallerPackageName(packInfo.packageName) == null)
{
apps.add(packInfo.packageName);
}
}
return apps;
}
这是一个好的开始,但是这也 returns 与预装的 Android 和三星应用程序相差很多。无论如何要将它们从列表中删除?我只希望用户安装来自未知来源的应用程序。
以下link已回答您的问题
PackageManager class 提供了 getInstallerPackageName 方法,它会告诉您安装了您指定的包的包名称。 Side-loaded 应用将不包含值。
How to know an application is installed from google play or side-load?
最初我认为检索未通过 Google Play 商店安装的应用程序就足够了。后来发现还需要过滤掉pre-installed个系统应用。
我在另一个 post 中找到了拼图的最后一部分:Get list of Non System Applications
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;
}
作为一项安全措施,我想获取未从 Play 商店安装的应用列表。有没有办法做到这一点?
packageManager
包含一个方法 getInstalledApplications
但我不知道要添加哪些标志来获取列表。任何帮助将不胜感激。
编辑:这是 v4_adi 的答案的代码示例。
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);
if (packageManager.getInstallerPackageName(packInfo.packageName) == null)
{
apps.add(packInfo.packageName);
}
}
return apps;
}
这是一个好的开始,但是这也 returns 与预装的 Android 和三星应用程序相差很多。无论如何要将它们从列表中删除?我只希望用户安装来自未知来源的应用程序。
以下link已回答您的问题 PackageManager class 提供了 getInstallerPackageName 方法,它会告诉您安装了您指定的包的包名称。 Side-loaded 应用将不包含值。
How to know an application is installed from google play or side-load?
最初我认为检索未通过 Google Play 商店安装的应用程序就足够了。后来发现还需要过滤掉pre-installed个系统应用。 我在另一个 post 中找到了拼图的最后一部分:Get list of Non System Applications
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;
}