系统有多个Launcher时,会在packages.xml 设置如下信息:
/data/system/packages.xml
<preferred-activities>
<item name="com.android.ulauncher/.Launcher" match="100000" set="2">
<set name="com.android.launcher/com.android.launcher2.Launcher" />
<set name="com.android.ulauncher/.Launcher" />
<filter>
<action name="android.intent.action.MAIN" />
<cat name="android.intent.category.HOME" />
<cat name="android.intent.category.DEFAULT" />
</filter>
</item>
</preferred-activities>
如何在启动时自动设置default Launcher呢?
在PackageManagerService构造函数中,会读取packages.xml文件:mRestoredSettings = mSettings.readLPw();
所以在之前添加设置:
readPermissions();
String firstBoot = SystemProperties.get("persist.sys.preactivity");
if ("0".equals(firstBoot)) {
addPreferredActivityForULauncher();
}
SystemProperties.set("persist.sys.preactivity", "1");
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MAIN");
filter.addCategory("android.intent.category.HOME");
filter.addCategory("android.intent.category.DEFAULT");
ComponentName preActivity = new ComponentName("com.android.ulauncher", "com.android.ulauncher.Launcher");
ComponentName[] set = new ComponentName[] {new ComponentName("com.android.launcher", "com.android.launcher2.Launcher"), preActivity};
mSettings.mPreferredActivities.addFilter(
new PreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY, set, preActivity));
scheduleWriteSettingsLocked();
/data/system/packages.xml
<preferred-activities>
<item name="com.android.ulauncher/.Launcher" match="100000" set="2">
<set name="com.android.launcher/com.android.launcher2.Launcher" />
<set name="com.android.ulauncher/.Launcher" />
<filter>
<action name="android.intent.action.MAIN" />
<cat name="android.intent.category.HOME" />
<cat name="android.intent.category.DEFAULT" />
</filter>
</item>
</preferred-activities>
如何在启动时自动设置default Launcher呢?
在PackageManagerService构造函数中,会读取packages.xml文件:mRestoredSettings = mSettings.readLPw();
所以在之前添加设置:
readPermissions();
String firstBoot = SystemProperties.get("persist.sys.preactivity");
if ("0".equals(firstBoot)) {
addPreferredActivityForULauncher();
}
SystemProperties.set("persist.sys.preactivity", "1");
mRestoredSettings = mSettings.readLPw();
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MAIN");
filter.addCategory("android.intent.category.HOME");
filter.addCategory("android.intent.category.DEFAULT");
ComponentName preActivity = new ComponentName("com.android.ulauncher", "com.android.ulauncher.Launcher");
ComponentName[] set = new ComponentName[] {new ComponentName("com.android.launcher", "com.android.launcher2.Launcher"), preActivity};
mSettings.mPreferredActivities.addFilter(
new PreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY, set, preActivity));
scheduleWriteSettingsLocked();
}
别的应用程序也可以类似这样来设置。