Android MTK 10.0 默认选择Launcher

需求:当自己系统中有多个应用。并且自己要默认选择一个Launcher(这里我出现了一个bug,一直没有解决掉,就是默认完launcher之后,在那个默认界面一直显示的是我自己默认的launcher界面)
如果没有预置GMS,只需按照步骤一修改,如果预置了GMS请按照步骤一、二修改

1、修改ActivityManagerService.java的updateActivityUsageStats方法

if (mContentCaptureService != null && (event == Event.ACTIVITY_PAUSED               || event == Event.ACTIVITY_RESUMED || event == Event.ACTIVITY_STOPPED               || event == Event.ACTIVITY_DESTROYED)) {           mContentCaptureService.notifyActivityEvent(userId, activity, event);       }       /*modified start for changed Launcher add by bnd mario start */       final PackageManager mPm = mContext.getPackageManager();       Intent homeIntent=new Intent();       homeIntent.addCategory(Intent.CATEGORY_HOME);       homeIntent.setAction(Intent.ACTION_MAIN);       homeIntent.addCategory(Intent.CATEGORY_DEFAULT);       ResolveInfo info = mPm.resolveActivity(homeIntent, PackageManager.MATCH_DEFAULT_ONLY);       //if("com.google.android.setupwizard".equals(info.activityInfo.packageName) || "android".equals(info.activityInfo.packageName)){ //if there is a default Launcher?       ComponentName DefaultLauncher=new ComponentName("com.flintrehab.launcher","com.flintrehab.launcher.MainActivity"); //here set the package name and class name of default launcher.       ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();       ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities);       ComponentName[]mHomeComponentSet = new ComponentName[homeActivities.size()];       for (int i = 0; i < homeActivities.size(); i++) {           final ResolveInfo candidate = homeActivities.get(i);           Log.d(TAG,"homeActivitie: candidate = "+candidate);           final ActivityInfo activityInfo= candidate.activityInfo;           ComponentName activityName = new ComponentName(activityInfo.packageName, activityInfo.name);           mHomeComponentSet[i] = activityName;       }       IntentFilter mHomeFilter = new IntentFilter(Intent.ACTION_MAIN);       mHomeFilter.addCategory(Intent.CATEGORY_HOME);       mHomeFilter.addCategory(Intent.CATEGORY_DEFAULT);       List<ComponentName>Activities=new ArrayList();       mPm.replacePreferredActivity(mHomeFilter, IntentFilter.MATCH_CATEGORY_EMPTY,mHomeComponentSet, DefaultLauncher);//     }       /*modified end*/

2、找到PackageManagerService.java的SystemReady方法

` public void systemReady() {        enforceSystemOrRoot(“Only the system can claim the system is ready”);         //add by bnd_xnq start        if(isFirstBoot()) {            String examplePackageName = “com.flintrehab.launcher”;            //String exampleActivityName = “com.android.launcher3.Launcher”;            final int callingUserId = UserHandle.getCallingUserId();            PackageManager mypm = mContext.getPackageManager();            AppOpsManager mAppOpsManager = (AppOpsManager)
mContext.getSystemService(Context.APP_OPS_SERVICE);            try {                PackageInfo packinfo = mypm.getPackageInfo(examplePackageName, 0);                       
mAppOpsManager.setMode(AppOpsManager.OP_REQUEST_INSTALL_PACKAGES,
packinfo.applicationInfo.uid, examplePackageName, AppOpsManager.MODE_ALLOWED);
//unknow source permmision                                         mAppOpsManager.setMode(AppOpsManager.OP_GET_USAGE_STATS,
packinfo.applicationInfo.uid, examplePackageName, AppOpsManager.MODE_ALLOWED);        
//usage access permiison            } catch (NameNotFoundException  e) {                e.printStackTrace();            }}

if(isFirstBoot()){       String pkg=“com.flintrehab.launcher”;       //android.util.Log.e(“xnq”,“xnq =” + xnq);       final NotificationManager mgr =
mContext.getSystemService(NotificationManager.class);          mgr.setNotificationPolicyAccessGranted(pkg, true);//Do not Disturb access
permision}

`

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 10.0中,Launcher3是一个默认的桌面启动器应用程序。默认情况下,Launcher3使用了多层桌面布局,由于每个应用程序的图标和小部件可以在不同的层级上进行放置,可以实现更多自定义和可玩性。 要将Launcher3修改为单层布局,可以进行以下步骤: 首先,要修改Launcher3的源代码。打开Launcher3的项目文件,在代码中找到与多层布局相关的部分。一般上,这些代码与屏幕上的图标和小部件的位置确定有关。 接下来,需要将多层布局改为单层布局。这意味着所有的图标和小部件将只能放置在一个层级上,不能另行分层。可以将所有图标和小部件视为一个整体,进行单层布局的更改。 在代码中找到与层级相关的代码,并进行相应的修改。可能涉及到图标和小部件的位置计算、绘制和触摸事件等。将多层布局的相关代码注释掉,或者删除,然后添加单层布局的代码。确保所有的图标和小部件都被正确地放置在单个层级上。 最后,重新编译和部署修改后的Launcher3应用程序。确保应用程序可以成功运行,并验证桌面布局是否变为单层。 通过以上步骤,就可以成功地将Android 10.0 Launcher3修改为单层布局。需要注意的是,这种修改可能涉及较多的代码更改,并且需要一定的编程经验和知识。如果对Android开发不熟悉,建议参考相关文档和指南,或咨询专业的开发人员进行帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值