Android9.0 Launcher3遇到的问题

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.csdn.net/sex_baby/article/details/103874015

(3)设置角标后,当改变桌面图标的形状时就角标就不显示。
好像是因为NotificationListenerService的onBind有一个标志没有被更改。(因为NotificationListenerService是一直存活的Service)
参考:NotificationListenerService失效的两种情况
https://blog.csdn.net/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 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);//这里为什么执行两次呢,只知道执行一次无法重置成功,显示角标。
        }

    }
}

你可能感兴趣的:(Android9.0 Launcher3遇到的问题)