Android 获取所有已安装的应用程序时过滤掉不可启动的应用程序
我正在开发一个应用程序,我想向用户展示所有已安装的应用程序,让他/她选择一个,然后用它做点什么。虽然我有一些问题,但我遵循了一个教程(这个:)。在完成本教程之后,我只得到了未预装的应用程序(如所有无法启动的后台应用程序),如果您想要用户从play store下载的应用程序,这非常好。问题是,在我的应用程序中,我想显示可启动的系统应用程序,如Youtube和浏览器,但不想显示不可启动的应用程序,如搜索应用程序提供商 以下是我在获取应用程序时使用的代码:Android 获取所有已安装的应用程序时过滤掉不可启动的应用程序,android,get,launch,Android,Get,Launch,我正在开发一个应用程序,我想向用户展示所有已安装的应用程序,让他/她选择一个,然后用它做点什么。虽然我有一些问题,但我遵循了一个教程(这个:)。在完成本教程之后,我只得到了未预装的应用程序(如所有无法启动的后台应用程序),如果您想要用户从play store下载的应用程序,这非常好。问题是,在我的应用程序中,我想显示可启动的系统应用程序,如Youtube和浏览器,但不想显示不可启动的应用程序,如搜索应用程序提供商 以下是我在获取应用程序时使用的代码: private List<App>
private List<App> loadInstalledApps(boolean includeSysApps) {
List<App> apps = new ArrayList<App>();
// the package manager contains the information about all installed apps
PackageManager packageManager = getPackageManager();
List<PackageInfo> packs = packageManager.getInstalledPackages(0); //PackageManager.GET_META_DATA
for(int i=0; i < packs.size(); i++) {
PackageInfo p = packs.get(i);
ApplicationInfo a = p.applicationInfo;
App app = new App();
app.setTitle(p.applicationInfo.loadLabel(packageManager).toString());
app.setPackageName(p.packageName);
app.setVersionName(p.versionName);
app.setVersionCode(p.versionCode);
CharSequence description = p.applicationInfo.loadDescription(packageManager);
app.setDescription(description != null ? description.toString() : "");
apps.add(app);
}
return apps;
}
loadInstalledApps私有列表(布尔值includeSyApps){
列表应用程序=新建ArrayList();
//软件包管理器包含有关所有已安装应用程序的信息
PackageManager PackageManager=getPackageManager();
List packs=packageManager.getInstalledPackages(0);//packageManager.GET_META_DATA
对于(int i=0;i
现在我的问题是,;过滤掉无法启动的应用程序的最佳方法是什么
感谢您的帮助 最好的方法是:
public static List<ApplicationInfo> getAllInstalledApplications(Context context) {
List<ApplicationInfo> installedApps = context.getPackageManager().getInstalledApplications(PackageManager.PERMISSION_GRANTED);
List<ApplicationInfo> launchableInstalledApps = new ArrayList<ApplicationInfo>();
for(int i =0; i<installedApps.size(); i++){
if(context.getPackageManager().getLaunchIntentForPackage(installedApps.get(i).packageName) != null){
//If you're here, then this is a launch-able app
launchableInstalledApps.add(installedApps.get(i));
}
}
return launchableInstalledApps;
}
公共静态列表GetAllInstalledApplication(上下文){
列出installedApps=context.getPackageManager().getInstalledApplication(PackageManager.PERMISSION_已授予);
List launchableInstalledApps=new ArrayList();
对于(int i=0;这不是一个好主意,因为某些应用程序会为getLaunchIntentForPackageName返回null。使用此解决方案,我遇到了“电话”应用程序不在应用程序列表中的问题。有关更好的解决方案,请查看此处: