原生桌面的Activity声明方式
android:name="com.android.launcher3.Launcher"
android:launchMode="singleTask"
android:clearTaskOnLaunch="true"
android:stateNotNeeded="true"
android:windowSoftInputMode="adjustPan"
android:screenOrientation="unspecified"
android:configChanges="keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenSize|screenLayout|smallestScreenSize"
android:resizeableActivity="true"
android:resumeWhilePausing="true"
android:taskAffinity=""
android:enabled="true">
因此,普通应用设置Launcher应用的方式
设置中设置默认桌面逻辑
path:设置-应用和通知-默认应用-主屏幕莹莹
image
点击后调用如下代码:
Settings中的源码DefaultHomePicker.java
//key传递的是包名+activity名称::com.android.launcher3/.Launcher m=0x108000}
@Override
protected boolean setDefaultKey(String key) {
if (!TextUtils.isEmpty(key)) {
final ComponentName component = ComponentName.unflattenFromString(key);//根据key,转化得到ComponentName
final List homeActivities = new ArrayList<>();
mPm.getHomeActivities(homeActivities);//获取系统中所有的桌面属性ResolveInfo
final List allComponents = new ArrayList<>();//获取系统中所有的桌面属性ComponentName
for (ResolveInfo info : homeActivities) {
final ActivityInfo appInfo = info.activityInfo;
ComponentName activityName = new ComponentName(appInfo.packageName, appInfo.name);
allComponents.add(activityName);
}
mPm.replacePreferredActivity(
DefaultHomePreferenceController.HOME_FILTER,
IntentFilter.MATCH_CATEGORY_EMPTY,
allComponents.toArray(new ComponentName[0]),//ComponentName数组,内容同allComponents
component);//需要设置默认桌面的目标component
// Launch the new Home app so the change