Android11默认切换第三方launcher

做这个需求之前一定要先读一下客户给的launcherAPK的包名和启动类名,避免出现我种情况(客户给的launcherAPK有两个包名是一样的,还不是客户提供给我的那个包名,我一直用客户提供的包名,做了好久也没作用,浪费了好多时间)

diff --git a/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java b/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java

old mode 100644

new mode 100755

index fadc15912dc..db2e3954def

--- a/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java

+++ b/frameworks/base/core/java/com/android/internal/app/ResolverActivity.java

第一种方法:

@@ -307,9 +307,51 @@ public class ResolverActivity extends Activity implements

intent.setFlags(intent.getFlags()&~Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

return intent;

}

+ // swl add

+ private void setupDefaultLauncher(String defPackageName, String defClassName) {

+ if ((defPackageName != null && defPackageName.trim().length() > 1)

+ && (defClassName != null && defClassName.trim().length() > 0)) {

+ IntentFilter filter = new IntentFilter();

+ filter.addAction("android.intent.action.MAIN");

+ filter.addCategory("android.intent.category.HOME");

+ filter.addCategory("android.intent.category.DEFAULT");

+ Intent intent=new Intent(Intent.ACTION_MAIN);

+ intent.addCategory(Intent.CATEGORY_HOME);

+ List list = new ArrayList();

+ list = getPackageManager().queryIntentActivities(intent, 0);

+ final int N = list.size();

+ ComponentName[] set = new ComponentName[N];

+ int bestMatch = 0;

+ for (int i=0; i

+ ResolveInfo r = list.get(i);

+ set[i] = new ComponentName(r.activityInfo.packageName,

+ r.activityInfo.name);

+ if (r.match > bestMatch) bestMatch = r.match;

+ }

+ ComponentName preActivity = new ComponentName(defPackageName, defClassName);

+ getPackageManager().addPreferredActivity(filter, bestMatch, set,preActivity);

+ }

+ }

+ // end

+

@Override

protected void onCreate(Bundle savedInstanceState) {

+ // swl add

+ if(true){

+ String defPackageName = "com.aceage.karie";

+ String defClassName = "com.aceage.karie.activity.launch.LaunchActivity";

+ setupDefaultLauncher(defPackageName, defClassName);

+ Intent intent = new Intent();

+ intent.setClassName(defPackageName, defClassName);

+ intent.setAction("android.intent.action.MAIN");

+ intent.addCategory("android.intent.category.HOME");

+ intent.addCategory("android.intent.category.DEFAULT");

+ startActivity(intent);

+ //Settings.Global.putInt(getApplication().getContentResolver(), Settings.Global.DEFAULT_HOME_SETTING_CHANGED, 1);

+ this.finish();

+ }

+ // end

// Use a specialized prompt when we're handling the 'Home' app startActivity()

final Intent intent = makeMyIntent();

final Set categories = intent.getCategories();

第二个方法:

@@ -381,6 +423,17 @@ public class ResolverActivity extends Activity implements

boolean filterLastUsed = mSupportsAlwaysUseOption && !isVoiceInteraction()

&& !shouldShowTabs();

mMultiProfilePagerAdapter = createMultiProfilePagerAdapter(initialIntents, rList, filterLastUsed);

+ /* // swl add

+ String launcherPackagename = "com.aceage.karie";

+ String launcherActivityname = "com.aceage.karie.activity.launch.LaunchActivity";

+ if(launcherPackagename != null && launcherPackagename.length() > 0 && launcherActivityname != null && launcherActivityname.length() > 0){

+ if(mResolvingHome){

+ setupDefaultLauncher(launcherPackagename,launcherActivityname);

+ finish();

+ return;

+ }

+ }

+ // end */

if (configureContentView()) {

return;

}

@@ -433,6 +486,32 @@ public class ResolverActivity extends Activity implements

intent.getAction() + ":" + intent.getType() + ":"

+ (categories != null ? Arrays.toString(categories.toArray()) : ""));

}

+ /* // swl add

+ private void setupDefaultLauncher(String defPackageName, String defClassName) {

+ if ((defPackageName != null && defPackageName.trim().length() > 1)

+ && (defClassName != null && defClassName.trim().length() > 0)) {

+ IntentFilter filter = new IntentFilter();

+ filter.addAction("android.intent.action.MAIN");

+ filter.addCategory("android.intent.category.HOME");

+ filter.addCategory("android.intent.category.DEFAULT");

+ Intent intent=new Intent(Intent.ACTION_MAIN);

+ intent.addCategory(Intent.CATEGORY_HOME);

+ List list = new ArrayList();

+ list = getPackageManager().queryIntentActivities(intent, 0);

+ final int N = list.size();

+ ComponentName[] set = new ComponentName[N];

+ int bestMatch = 0;

+ for (int i=0; i

+ ResolveInfo r = list.get(i);

+ set[i] = new ComponentName(r.activityInfo.packageName,

+ r.activityInfo.name);

+ if (r.match > bestMatch) bestMatch = r.match;

+ }

+ ComponentName preActivity = new ComponentName(defPackageName, defClassName);

+ getPackageManager().addPreferredActivity(filter, bestMatch, set,preActivity);

+ }

+ }

+ // end */

private boolean isIntentPicker() {

return getClass().equals(ResolverActivity.class);

两个方法的区别就是加入的位置不同,第一个方法开机就运行了,第二个是判断launcher是否有home属性的时候运行的,可以直接用adb命令直接切换launcher3和客户的launcher,命令如下:

关闭客户launcher,切换到系统launcher
1.adb root
2.adb shell pm enable com.android.launcher3
3.adb shell pm disable com.aceage.karie

关闭系统launcher,打开客户launcher
1.adb shell pm enable com.aceage.karie
2.adb shell pm disable com.android.launcher3

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android 11 默认不会强制使用第三方Launcher。用户可以选择使用原生的Launcher或自己安装第三方Launcher。然而,Google已经加固了设备的安全,因此在使用第三方Launcher时,用户必须给予允许读取屏幕内容的权限。这是为了确保第三方Launcher不能篡改设备上的敏感信息。此外,Google还对自己的原生Launcher进行了优化,使其更加流畅和易用。所以,对于大多数用户来说,使用原生的Launcher是最好的选择。但如果用户对于自定义界面有特别要求,或是对于某些第三方Launcher很喜欢的话,那么使用第三方Launcher也是可以的。总之,无论使用哪个Launcher,都需要注意安全,保护设备上的敏感数据。 ### 回答2: Android 11 是 Google 公司推出的最新移动操作系统。与前一版本相比,Android 11 带来了一些升级和优化,其中一个值得关注的变化就是默认支持第三方 Launcher。 在过去,用户必须通过下载和安装第三方 Launcher 应用程序来更改 Android 设备的主屏幕样式。有些时候,这样做可能会对系统的稳定性和安全性产生影响。但对于 Android 11 来说,Google 已经在其操作系统中默认支持第三方 Launcher,这使用户能够更轻松、更方便地自定义他们的主屏幕。 对于用户来说,这是一个非常受欢迎的变化。现在,他们可以通过下载并安装他们喜欢的第三方 Launcher 应用程序,无需担心其稳定性和安全性问题。另外,用户还可以在设置中设置默认Launcher,以便在按下 Home 键时能够达到更快的响应速度。 除此之外,Android 11 同样具备了更好的隐私和安全保护,比如访问权限的改进、应用控制等隐私保障,同时还增加了新的流畅度和更好的性能,比如锁屏外信息、长截图等实用功能。这些都使 Android 11 成为一款更为优秀的操作系统,为用户提供更好的体验。 ### 回答3: Android 11 默认第三方Launcher是指,在Android 11系统中,用户可以选择使用自己喜欢的第三方Launcher来替换原本系统默认Launcher。这是一项新的特性,它使得用户在使用Android 11系统时,可以更加个性化地定制自己的手机桌面。 如果你选择使用第三方Launcher,那么它将被设置为默认Launcher,这意味着当你按下Home键时,将会看到你选择的那个第三方Launcher而不是系统默认Launcher。这项特性增加了用户对自己设备的控制力,让用户能够更好地定制自己的手机桌面。 但是,需要注意的是,第三方Launcher并不一定比系统默认Launcher更好用。一些第三方Launcher可能会影响设备的性能和稳定性,或者存在安全风险。因此,用户应该仔细选择第三方Launcher,并在使用过程中注意安全问题和对设备的影响。 总之,Android 11 默认第三方Launcher是一项非常实用的新特性,它为用户提供了更多的自由度和个性化选择,同时也带来了新的安全和性能风险。希望用户们在使用这个特性的时候,能够谨慎选择、慎重使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值