代码示例如下:
1、得到所有应用对应的ResolveInfo
.............
private void setupAdapter() {
//创建一个隐式Intent,所有应用的主Activity均能处理该Intent
Intent startupIntent = new Intent(Intent.ACTION_MAIN);
startupIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final PackageManager pm = getActivity().getPackageManager();
//利用Pkg Mgr解析Intent,得到所有能够处理Intent的Activity的ResolveInfo
List<ResolveInfo> activities = pm.queryIntentActivities(startupIntent, 0);
//排序
Collections.sort(activities, new Comparator<ResolveInfo>() {
@Override
public int compare(ResolveInfo a, ResolveInfo b) {
return String.CASE_INSENSITIVE_ORDER.compare(
a.loadLabel(pm).toString(),
b.loadLabel(pm).toString()
);
}
});
mRecyclerView.setAdapter(new ActivityAdapter(activities));
}
...............
2、解析出ResolveInfo后,就可以从ResolveInfo中获取到应用名称及图片
void bindActivity(ResolveInfo resolveInfo) {
mResolveInfo = resolveInfo;
PackageManager pm = getActivity().getPackageManager();
//得到图片
mImageView.setImageDrawable(mResolveInfo.loadIcon(pm));
//得到名称
String appName = mResolveInfo.loadLabel(pm).toString();
mNameTextView.setText(appName);
}
ResolveInfo中还可以得到其它信息,可以参考对应的API。