文章目录

前言

Android自定义Launcher时,需要获取所有可以启动的app进行展示,获取所有包名后,需要判断该包名是否可以启动。

记录于此,方便自己查阅。

正文

获取所有安装的ApplicationInfo

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();
}

参考文章

  1. 腾讯元宝AI》

  2. 通义灵码AI》

  3. 其他

相关文章

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

none
暂无评论...