android app list,Android 读取可启动的app列表

public List getAllApps( final OnInstalledPackagesCallback callback) {

LogUtils.d(TAG,"getAllApps() getInstalledPackages start=" + (System.currentTimeMillis()));

if (callback!=null)

callback.onStartGet();

AppInfo myAppInfo;

/**

* GET_ACTIVITIES, GET_CONFIGURATIONS, GET_GIDS, GET_INSTRUMENTATION, GET_INTENT_FILTERS,

* GET_META_DATA, GET_PERMISSIONS, GET_PROVIDERS, GET_RECEIVERS, GET_SERVICES,

* GET_SHARED_LIBRARY_FILES, GET_SIGNATURES, GET_URI_PERMISSION_PATTERNS,

* MATCH_DISABLED_COMPONENTS, MATCH_DISABLED_UNTIL_USED_COMPONENTS,

* MATCH_UNINSTALLED_PACKAGES to modify the data returned.

*/

//获取到所有安装了的应用程序的信息,包括那些卸载了的,但没有清除数据的应用程序

List packageInfos = packageManager

.getInstalledPackages(PackageManager.MATCH_UNINSTALLED_PACKAGES | PackageManager.GET_ACTIVITIES);

mStringBuilder = new StringBuilder("\"");

if (null != mAppInfoAlls) {

mAppInfoAlls.clear();

} else {

mAppInfoAlls = new ArrayList<>();

}

for (PackageInfo info : packageInfos) {

if ( info.activities == null || info.activities.length == 0) {

//没有activity ,表示不能打开

continue;

}

Intent queryActIntent = new Intent(Intent.ACTION_MAIN,null);

queryActIntent.addCategory(Intent.CATEGORY_LAUNCHER);

queryActIntent.setPackage(info.packageName);

List resolveInfoList = packageManager.queryIntentActivities(queryActIntent,0);

if (resolveInfoList == null || resolveInfoList.isEmpty()) {

continue;

}

ResolveInfo resolveinfo = resolveInfoList.iterator().next();

if (resolveinfo == null) {

continue;

}

String actClsName = resolveinfo.activityInfo.name;

if (actClsName == null) {

continue;

}

myAppInfo = new AppInfo();

//拿到包名

String packageName = info.packageName;

//拿到应用程序的信息

ApplicationInfo appInfo = info.applicationInfo;

//拿到应用程序的大小

//long codesize = packageStats.codeSize;

myAppInfo.setPackageName(packageName);

//拿到应用程序的程序名

String appName = packageManager.getApplicationLabel(appInfo).toString();

myAppInfo.setAppName(appName);

//拿到应用程序的图标

myAppInfo.setIcon(packageManager.getApplicationIcon(appInfo));

ConstUtil.saveWechatVersion(info);

if (filterApp(appInfo)) {

myAppInfo.setSystemApp(false);

} else {

myAppInfo.setSystemApp(true);

}

mStringBuilder.append(myAppInfo.appName + "\",\"");

mAppInfoAlls.add(myAppInfo);

LogUtils.d(TAG,"getAllApps() info.name =" + (packageManager.getApplicationLabel(info.applicationInfo).toString()));

}

if (callback!=null)

callback.onFinish(mAppInfoAlls);

LogUtils.d(TAG,"getAllApps() getInstalledPackages end=" + (System.currentTimeMillis()));

return mAppInfoAlls;

}

//这个方法很多app 不会显示出来

public void getAllAppsCanOpen() {

Intent mainIntent = new Intent(Intent.ACTION_MAIN,null);

mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

// 通过查询,获得所有ResolveInfo对象.

List resolveInfos = packageManager

.queryIntentActivities(mainIntent,0);

// 调用系统排序 , 根据name排序

// 该排序很重要,否则只能显示系统应用,而不能列出第三方应用程序

Collections.sort(resolveInfos,new ResolveInfo.DisplayNameComparator(packageManager));

mStringBuilder = new StringBuilder("");

if (mAppInfoAlls != null) {

mAppInfoAlls.clear();

} else {

mAppInfoAlls = new ArrayList<>();

}

for (ResolveInfo reInfo : resolveInfos) {

String activityName = reInfo.activityInfo.name; // 获得该应用程序的启动Activity的name

String pkgName = reInfo.activityInfo.packageName; // 获得应用程序的包名

String appLabel = (String)reInfo.loadLabel(packageManager); // 获得应用程序的Label

Drawable icon = reInfo.loadIcon(packageManager); // 获得应用程序图标

// 为应用程序的启动Activity 准备Intent

Intent launchIntent = new Intent();

launchIntent.setComponent(new ComponentName(pkgName,

activityName));

// 创建一个AppInfo对象,并赋值

AppInfo appInfo = new AppInfo();

appInfo.setAppName(appLabel);

appInfo.setPackageName(pkgName);

appInfo.setIcon(icon);

appInfo.setIntent(launchIntent);

mStringBuilder.append(appLabel + "\n");

mAppInfoAlls.add(appInfo); // 添加至列表中

}

}

//这里是首字母升序排列

Collections.sort(resolveInfos,new ResolveInfo.DisplayNameComparator(packageManager));

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值