Android/Java PackageManager仅列出特定的系统应用程序

Android/Java PackageManager仅列出特定的系统应用程序,java,android,arraylist,android-package-managers,Java,Android,Arraylist,Android Package Managers,我有一个由软件包管理器填充的列表,它将显示所有系统应用程序的列表。我需要找到一种方法来“过滤”该列表,以便只显示特定的应用程序。我有一个应用程序列表,我将“允许”用户操作。 是否可以在所有系统应用中仅显示这些应用?我的意思是过滤他们的名字,如果在设备上找到,然后显示在列表上? 非常感谢您的建议!谢谢大家! 这是填充列表的相关代码(父项是片段,列表是在异步任务中创建的) 私有类GearAppsToDebloat扩展异步任务{ private ProgressDialog progress=null

我有一个由软件包管理器填充的列表,它将显示所有系统应用程序的列表。我需要找到一种方法来“过滤”该列表,以便只显示特定的应用程序。我有一个应用程序列表,我将“允许”用户操作。 是否可以在所有系统应用中仅显示这些应用?我的意思是过滤他们的名字,如果在设备上找到,然后显示在列表上? 非常感谢您的建议!谢谢大家! 这是填充列表的相关代码(父项是片段,列表是在异步任务中创建的)

私有类GearAppsToDebloat扩展异步任务{
private ProgressDialog progress=null;
//使用软件包管理器获取设备上所有已安装的应用程序
最终列表包装商=包装经理
.getInstalledPackages(PackageManager.GET_元数据);
最终列表packageList1=packageManager
.getInstalledPackages(0);
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
packageList1.clear();
对于(int n=0;n
对不起,我只是用C语言在Xamarin中做了这件事,但我相信你也能写出同样的东西

我通过在GetInstalledApplications方法上使用lambda表达式获得了所需的应用程序。如果类名出现在我要查找的应用程序列表中,它将选择该应用程序

这也为我提供了一个非常快速的返回,使用我遇到的其他方法,我花了大约8秒来完成相同的任务

const string Facebook = "com.facebook.katana.app.FacebookApplication";
const string Email = "com.android.email.Email";
const string Whatsapp = "com.whatsapp.App";
const string Twitter = "com.twitter.android.TwitterApplication";
private IEnumerable<string> AvailableApps;

private void SearchAvailableApps()
        {
            List<string> apps = new List<string>() { Facebook, Email, Whatsapp, Twitter };
            PackageManager pm = this.Activity.PackageManager;
            AvailableApps = pm.GetInstalledApplications(0).Where(x => apps.Contains(x.ClassName)).Select(x => x.ClassName);            
        }
const string Facebook=“com.Facebook.katana.app.Facebook应用程序”;
const string Email=“com.android.Email.Email”;
常量字符串Whatsapp=“com.Whatsapp.App”;
const string Twitter=“com.Twitter.android.Twitter应用程序”;
私有IEnumerableApps;
私有void SearchAvailableApps()
{
列表应用程序=新列表(){Facebook、电子邮件、Whatsapp、Twitter};
PackageManager pm=this.Activity.PackageManager;
AvailableApps=pm.GetInstalledApplications(0)。其中(x=>apps.Contains(x.ClassName))。选择(x=>x.ClassName);
}
现在,您应该有您知道用户已在其设备上安装的应用程序列表

const string Facebook = "com.facebook.katana.app.FacebookApplication";
const string Email = "com.android.email.Email";
const string Whatsapp = "com.whatsapp.App";
const string Twitter = "com.twitter.android.TwitterApplication";
private IEnumerable<string> AvailableApps;

private void SearchAvailableApps()
        {
            List<string> apps = new List<string>() { Facebook, Email, Whatsapp, Twitter };
            PackageManager pm = this.Activity.PackageManager;
            AvailableApps = pm.GetInstalledApplications(0).Where(x => apps.Contains(x.ClassName)).Select(x => x.ClassName);            
        }