天天看點

Android中的PackageManager

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

繼續閱讀