Android8.1/9/10修改系统默认launcher

Android8.1/9/10修改系统默认launcher

当系统有多个launcher共存的时候,可以通过此方式设置

修改文件路径:

frameworks\base\services\core\java\com\android\server\am\ActivityManagerService.java

修改此文件是因为每次开机都可以加载此代码,所以对于一些动态需求会有效果。
修改内容:

private void setDefaultLauncher(){
     // 只需要修改此处即可
	String defaultlauncherpckname = "xxx.xxx.xxx.xxx";
 
	PackageManager mPm = mContext.getPackageManager();
	Intent mIntent = new Intent();
	mIntent.setAction(Intent.ACTION_MAIN);
	mIntent.addCategory(Intent.CATEGORY_HOME);
	List<ResolveInfo> mList = mPm.queryIntentActivities(mIntent, 0);
	ComponentName[] mHomeComponentSet = new ComponentName[mList.size()];
	ComponentName newHome = null;
	
	for (int i = 0; i < mList.size(); i++) {
		 ActivityInfo info = mList.get(i).activityInfo;
		 ComponentName componentName = new ComponentName(info.packageName, info.name);
		 mHomeComponentSet[i] = componentName;
		 if (info.packageName.equals(defaultlauncherpckname)) {
			 newHome = componentName;
		 }
	}
		
	if (newHome != null) {
		IntentFilter mHomeFilter = new IntentFilter();
		mHomeFilter.addAction(Intent.ACTION_MAIN);
		mHomeFilter.addCategory(Intent.CATEGORY_HOME);
		mHomeFilter.addCategory(Intent.CATEGORY_DEFAULT);
 		// Android8.1以后弃用了源码中的方法,如果依旧用会报错(笔者没办法调用老式)
		mPm.replacePreferredActivity(mHomeFilter, IntentFilter.MATCH_CATEGORY_EMPTY, mHomeComponentSet, newHome);
	}
}

然后在 startHomeActivityLocked()方法中调用即可

boolean startHomeActivityLocked(int userId, String reason) {
	if (mFactoryTest == FactoryTest.FACTORY_TEST_LOW_LEVEL
			&& mTopAction == null) {
		  // We are running in factory test mode, but unable to find
          // the factory test app, so just sit around displaying the
          // error message and don't try to start anything.
          return false;
    }
     
   	// add start	
	setDefaultLauncher();
	// add end  
	Intent intent = getHomeIntent();
    ActivityInfo aInfo = resolveActivityInfo(intent, STOCK_PM_FLAGS, userId);
    .....
}

好了,至此就完成了,如果还需要系统当前默认launcher,可以通过以下方法:

Intent intent = new Intent();
intent.setAction("android.intent.action.MAIN");
intent.addCategory("android.intent.category.DEFAULT");
intent.addCategory("android.intent.category.HOME");
final ResolveInfo res = getContext().getPackageManager().resolveActivity(intent, 0);
// if (res.activityInfo.packageName.equals("android")) {
// 此packageName是当前launcher的包名,
// 如果当前还没有默认launcher,则默认launcher的包名为 android
android.util.Log.d("defaulthome","showlauncher1 = " + res.activityInfo.packageName);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值