Android自定义Launcher时,需要获取所有可以启动的app进行展示,获取所有包名后,需要判断该包名是否可以启动。
记录于此,方便自己查阅。
正文
mPackageManager = BiuApp.getContext().getPackageManager(); List<ApplicationInfo> infoList = mPackageManager.getInstalledApplications(PackageManager.GET_META_DATA);
下面通过三种方式进行判断包名是否可以启动。
方式1
通过下面方式,返回Intent,如果存在Intent就表示可以启动
if (mPackageManager.getLaunchIntentForPackage(app.packageName) != null) { //可以启动 }
方式2
检查Activity是否可导出或有intent-filter
public boolean hasAnyExportedActivity(Context context, String packageName) { PackageManager packageManager = context.getPackageManager(); try { PackageInfo packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES); if (packageInfo.activities != null) { for (ActivityInfo activityInfo : packageInfo.activities) { if (activityInfo.exported) { return true; } } } } catch (Exception e) { e.printStackTrace(); } return false; }
方式3
检查是否有LAUNCHER Activity
public boolean hasLaunchableActivity(Context context, String packageName) { PackageManager packageManager = context.getPackageManager(); Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setPackage(packageName); List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0); return !activities.isEmpty(); }
参考文章
历史上的今天
- 《Android通过包名判断app是否可以启动》
 - 《Android NDK配置简单记录》
 - 《历趣》
 - 《华为商城》
 - 《喵宅苑》
 - 《2265安卓网》
 - 《Apple》
 - 《鱼塘热榜》
 - 《过早客》
 
