设置default Launcher

系统有多个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");

mRestoredSettings = mSettings.readLPw();


private void addPreferredActivityForULauncher() {
    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();

}

别的应用程序也可以类似这样来设置。

开发Launcher应用需要设置以下几个方面: 1. **权限设置**: - 在`AndroidManifest.xml`文件中声明必要的权限,例如: ```xml <uses-permission android:name="android.permission.INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.UNINSTALL_PACKAGES" /> <uses-permission android:name="android.permission.SET_WALLPAPER" /> <uses-permission android:name="android.permission.BIND_APPWIDGET" /> ``` 2. **主活动设置**: - 在`AndroidManifest.xml`中设置主活动,并确保其具有`CATEGORY_HOME`属性,以便系统将其识别为默认启动器: ```xml <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/Theme.Launcher"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> ``` 3. **桌面布局设计**: - 设计桌面的布局,包括应用图标、小部件、壁纸等。可以使用`RecyclerView`或`GridView`来展示应用图标。 4. **应用图标获取**: - 使用`PackageManager`获取设备上安装的所有应用,并获取其图标和名称: ```java PackageManager pm = getPackageManager(); List<ApplicationInfo> apps = pm.getInstalledApplications(PackageManager.GET_META_DATA); ``` 5. **点击事件处理**: - 处理用户点击应用图标的事件,启动相应的应用: ```java Intent intent = pm.getLaunchIntentForPackage(app.packageName); startActivity(intent); ``` 6. **自定义功能**: - 根据需求添加自定义功能,例如快捷方式、文件夹、设置选项等。 7. **优化性能**: - 确保应用在启动和运行过程中性能良好,避免卡顿和崩溃。 通过以上设置,你可以开发一个基本的Launcher应用,并根据需求进行功能扩展和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值