【已解决】 Android 11 SystemUI
Android 11 SystemUI 去掉Navigationbar 长按WiFi或蓝牙图标SystemUI 崩溃
去掉Naviagionbar ,在StatusBar.java 找到了createNavigationBar(result)方法,将其注释掉。单独编译通过,push进机器后,开启正常,没有了Naviagionbar 。但是下拉StatusBar,想长按WiFi或蓝牙图标进入设置项,却导致SystemUI崩溃。下面是报错

NavigationBarController.java
void createNavigationBar(Display display, RegisterStatusBarResult result) {
if (display == null) {
return;
}
final int displayId = display.getDisplayId();
final boolean isOnDefaultDisplay = displayId == DEFAULT_DISPLAY;
final IWindowManager wms = WindowManagerGlobal.getWindowManagerService();
try {
if (!wms.hasNavigationBar(displayId)) {
return;
}
} catch (RemoteException e) {
// Cannot get wms, just return with warning message.
Log.w(TAG, "Cannot get WindowManager.");
return;
}
final Context context = isOnDefaultDisplay
? mContext
: mContext.createDisplayContext(display);
NavigationBarFragment.create(context, (tag, fragment) -> {
NavigationBarFragment navBar = (NavigationBarFragment) fragment;
// Unfortunately, we still need it because status bar needs LightBarController
// before notifications creation. We cannot directly use getLightBarController()
// from NavigationBarFragment directly.
LightBarController lightBarController = isOnDefaultDisplay
? Dependency.get(LightBarController.class)
: new LightBarController(context,
Dependency.get(DarkIconDispatcher.class),
Dependency.get(BatteryController.class),
Dependency.get(NavigationModeController.class));
navBar.setLightBarController(lightBarController);
// TODO(b/118592525): to support multi-display, we start to add something which is
// per-display, while others may be global. I think it's time to add
// a new class maybe named DisplayDependency to solve per-display
// Dependency problem.
AutoHideController autoHideController = isOnDefaultDisplay
? Dependency.get(AutoHideController.class)
: new AutoHideController(context, mHandler,
Dependency.get(IWindowManager.class));
navBar.setAutoHideController(autoHideController);
navBar.restoreAppearanceAndTransientState();
mNavigationBars.append(displayId, navBar);
tDisplayId = displayId;
if (result != null) {
navBar.setImeWindowStatus(display.getDisplayId(), result.mImeToken,
result.mImeWindowVis, result.mImeBackDisposition,
result.mShowImeSwitcher);
}
});
}
公司大佬讲是高通平台的问题 ,貌似要在报错的位置 就是new handler()改为new Handler(Looper.getMainLooper()), 我也是才知道原来有两种方式,可惜当时没有理解到大据哥的意思 ,呜呜!!!
艾特大锯哥
补充:我最初的目的是想要NaviagtionBar永久隐藏,所以我注释了
导致了上面的情况,之后我不注释它,就回复正常了。我看不出来二者有什么必然的联系?就很好奇!!!
报错信息不全,看不够后面的信息了