1.去掉搜索框和切换系统桌面风格。
首先search_container_workspace.xml就是搜索框的布局,如果只是简单的隐藏,只要将布局的高度设置为0dp就行了。
如果要将桌面图标拉到原来放搜索框的位置只是隐藏是不行的。
看代码mWorkspace.bindAndInitFirstWorkspaceScreen(null /* recycled qsb */);就是将搜索框用代码放到launcher上的,要去掉就得进入此方法中有一个布尔值FeatureFlags.QSB_ON_FIRST_SCREEN,这个值默认为true的,将其设置为false就可以去掉搜索框了(而且布局也不用去修改也可以去掉搜索框了)。
2.切换简易模式的问题。
我的程序是使用华为安全授权设置自己的程序为Launcher的
在华为手机切换系统桌面风格和切换简易模式时,都会更改系统的Launcher的,所以要在设置这些时会不显示我的程序的Launcher的,试过找广播和置顶的Activity(监听切换到这个Activity时直接执行home键代码,不让用户去设置)来解决问题。但最终还是没找到相关的广播监听,而监听置顶的Activity只能看到自己进程的Activity,无法查看到其他进程的置顶Activity,所以这两个方法都失败了。最后只能默默是查看代码了。在看到切换Launcher时都会有一句Configuration changed代码时,就想到在application中的onConfigurationChanged()方法在切换语言时会调到这个方法就试试,居然就可以了,所以在这个方法中去重新设置自己的程序为Launcher就解决了。
3.桌面图标角标问题。
首先要在设置中打开显示圆点角标的显示
(1)跳转设置页面打开权限
if (!NotificationManagerCompat.getEnabledListenerPackages(this).contains(getPackageName())) { startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS")); } (2)将角标变为特定颜色。 将mBadgeColor = IconPalette.getMutedColor(info.iconColor, 0.54f);改为 mBadgeColor = Color.RED;即可。 如果要显示数字在网上找到一个类似的方法:https://blog.youkuaiyun.com/sex_baby/article/details/103874015 (3)设置角标后,当改变桌面图标的形状时就角标就不显示。 好像是因为NotificationListenerService的onBind有一个标志没有被更改。(因为NotificationListenerService是一直存活的Service) 参考:NotificationListenerService失效的两种情况 https://blog.youkuaiyun.com/u013836857/article/details/82732906 第二个链接主要看重置部分的代码的。 下面就整理出来的部分代码: 在LauncherAppState类的构造方法LauncherAppState(Context context)中的
mNotificationBadgingObserver = new SettingsObserver.Secure(mContext.getContentResolver()){ @Override public void onSettingChanged(boolean isNotificationBadgingEnabled) { if (isNotificationBadgingEnabled) { ensureCollectorRunning(); NotificationListener.requestRebind(new ComponentName( mContext, NotificationListener.class)); } } };
/** * 重置NotificationListenerService的标志 */ private void ensureCollectorRunning() { ComponentName collectorComponent = new ComponentName(mContext, NotificationListener.class); ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); boolean collectorRunning = false; List<ActivityManager.RunningServiceInfo> runningServices = manager.getRunningServices(Integer.MAX_VALUE); if (runningServices != null) { for (ActivityManager.RunningServiceInfo service : runningServices) { if (service.service.equals(collectorComponent)) { if (service.pid == android.os.Process.myPid()) { collectorRunning = true; } } } if (!collectorRunning) { PackageManager pm = mContext.getPackageManager(); pm.setComponentEnabledSetting(collectorComponent, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); pm.setComponentEnabledSetting(collectorComponent, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);//这里为什么执行两次呢,只知道执行一次无法重置成功,显示角标。 } } }