如Android P的源码中获取可以设置壁纸app的逻辑
Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER);//手机中能设置壁纸的活动
PackageManager pm = getPackageManager();//获得PackageManager对象
List<ResolveInfo> rList = pm.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);//通过查询,获取所有匹配的ResolveInfo对象
PreferenceScreen parent = getPreferenceScreen();
parent.setOrderingAsAdded(false);
/*
*将这些对象添加到PreferenceScreen的Preference里,设置icon、title
*/
for (ResolveInfo info : rList) {
Preference pref = new Preference(getPrefContext());
Intent prefIntent = new Intent(intent).addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
prefIntent.setComponent(new ComponentName(
info.activityInfo.packageName, info.activityInfo.name));
pref.setIntent(prefIntent);
CharSequence label = info.loadLabel(pm);
if (label == null) label = info.activityInfo.packageName;
pref.setTitle(label);
pref.setIcon(info.loadIcon(pm));
parent.addPreference(pref);
}