当系统存在多个Launcher的时候 ,点击图标进行切换,这里提供三种方式 进去处理
注意前提条件是具备下面事项,需要系统级别的权限
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.rtkj.switchlauncher"
android:sharedUserId="android.uid.systemui"
<uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS" />
可以导出Apk文件放到系统的system/app目录下面去编译
第一种方式 : 清理Launcher的默认设置的 默认值相当于在设置->应用程序->管理应用程序->所有应用程序列表,找到之前设置的
默认Launcher,并取消了默认值,系统会重新弹出launcher选择框。
private void clearDefaultValues(String packageName) {
getPackageManager().clearPackagePreferredActivities(packageName);
}
第二种方式: 通过pm进行 清理 后添加 或者是替换当前的 ,这里显示的是两个Launcher的替换
private void setDefaultHome(String packeageName ,String className,String oldPackage,String oldName) {
PackageManager pm = getPackageManager();
IntentFilter f = new IntentFilter();
f.addAction(Intent.ACTION_MAIN);
f.addCategory(Intent.CATEGORY_HOME);
f.addCategory(Intent.CATEGORY_DEFAULT);
ComponentName component = new ComponentName(packeageName,className );
ComponentName[] components = new ComponentName[] {new ComponentName(oldPackage,oldName),component};
<span style="color:#FF0000;">pm.clearPackagePreferredActivities(oldPackage);</span>// 清理配置的默认信息
pm.addPreferredActivity(f, IntentFilter.MATCH_CATEGORY_EMPTY, components, component);//添加
<span style="color:#FF0000;">//pm.replacePreferredActivity(f, IntentFilter.MATCH_CATEGORY_EMPTY, components, component);</span> //替换
}
//存在多个以上的Launcher的时候
private void setDefaultLauncher() {
// remove this activity from the package manager.
PackageManager pm = getPackageManager();
String