Android6.0 屏蔽壁纸功能

软件平台:android6.0

硬件平台:MT6797

    这两天搞了一个定制需求,也算是一个bug吧,6.0的系统前阵子做了系统裁剪,去掉了几十个app和service,结果一开始没出现的问题,裁剪后出来了,就是系统开机会始终显示一张默认壁纸,由于我们的硬件没有lcd,所以这个问题一开始被忽视了,在我们命令行开启app的时候,发现app内部的声音出来了,但实质屏幕显示依然是壁纸。

    于是,有了裁撤壁纸功能的想法。

最开始是尝试setttings配置项把def_lockscreen_disabled设置为false,但是并没啥卵用。

    接着尝试看WallPaperService启动部分代码:

在SystemServer.java中有其加载启动部分,如下:

            if (!disableNonCoreServices && context.getResources().getBoolean(
                        R.bool.config_enableWallpaperService)) {
                try {
                    Slog.i(TAG, "Wallpaper Service");
                    wallpaper = new WallpaperManagerService(context);
                    ServiceManager.addService(Context.WALLPAPER_SERVICE, wallpaper);
                } catch (Throwable e) {
                    reportWtf("starting Wallpaper Service", e);
                }
            }

可以看到标红的属性字段是是否加载壁纸服务的条件,搜索这项配置,发现是在frameworks/base/core/res/res/values/config.xml中配置,

true

将true改为false:

false

在添加了上述改动后,壁纸问题概率低了不少,但是也会偶尔出现,后来发现是SystemUI状态栏状态更新的时候会有是否呈现壁纸的判断逻辑,而这个逻辑没有添加对上述两个属性的配置判断,在此,直接把SystemUI这部分作如下修改:

--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
@@ -98,13 +98,17 @@ public class StatusBarWindowManager {
     }
 
     private void applyKeyguardFlags(State state) {
-        if (state.keyguardShowing) {
+        /*if (state.keyguardShowing) {
             mLpChanged.flags |= WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
             mLpChanged.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
         } else {
             mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
             mLpChanged.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
-        }
+        }*/
+
+        // we don't need keyguard display
+        mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
+        mLpChanged.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;

     }
 
     private void adjustScreenOrientation(State state) {

无论啥情况,壁纸和锁屏的标志位都置为0。


至此,解决。。。















你可能感兴趣的:(Android)