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