这个功能用于刷入的软件版本和硬件版本不匹配的时候,弹出一个页面,全局占满,提示文字信息,禁用此手机的所有功能(不响应界面的所有点击操作)。
我做的判断是,判断出来结果之后,弹出一个页面(activity)提示,但在做不能全屏点击时,遇到了一些问题,以下一些解决方法仅供参考。
网上,禁用下拉状态栏方法一:我实践之后好像无效。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
disableStatusBar();
super.onWindowFocusChanged(hasFocus);
}
public void disableStatusBar(){
try {
Object service = getSystemService("statusbar");
Class<?> claz = Class.forName("android.app.StatusBarManager");
Method expand = claz.getMethod("collapse");
expand.invoke(service);
} catch (Exception e) {
e.printStackTrace();
}
}
方法二:
在页面添加一个透明的view,霸屏,禁止点击。
private void showFloatingWindow(){
//view = new VersionCompareResultView(this);
view = new View(this);
mLayoutParams = new WindowManager.LayoutParams();
mLayoutParams.format = PixelFormat.TRANSPARENT;//透明
mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
// mLayoutParams.type = WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;TYPE_SYSTEM_DIALOG
mLayoutParams.gravity = Gravity.LEFT | Gravity.TOP;
mLayoutParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_FULLSCREEN;
mLayoutParams.x = -10;
mLayoutParams.y = -10;
Display display = windowManager.getDefaultDisplay();
Point p = new Point();
display.getRealSize(p);
mLayoutParams.width = p.x;
mLayoutParams.height = p.y;
windowManager.addView(view, mLayoutParams);
}
mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
但是不能做到禁止下拉状态栏,基于此,我想重写view,VersionCompareResultView.java然后对方法重写:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Log.d("lcc","dispatchTouchEvent ");
return true;
}
但是这样也不能禁止下拉…我不知道是不是因为实际上我的view并没有全屏覆盖,不然为啥不能拦截。
我查找到网上的一些禁止下拉状态栏的方法,其中有效方法为:
Android7.1 禁用系统状态栏的下拉通知菜单
根据我打的log发现,在resetview方法里面,会在下滑状态栏之后上滑会触发这个调用。
@Override
public void resetViews(boolean animate) {
mIsLaunchTransitionFinished = false;
mBlockTouches = false;
if (!mLaunchingAffordance) {
mAffordanceHelper.reset(false);
mLastCameraLaunchSource = KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_AFFORDANCE;
}
mStatusBar.getGutsManager().closeAndSaveGuts(true /* leavebehind */, true /* force */,
true /* controls */, -1 /* x */, -1 /* y */, true /* resetMenu */);
if (animate && !isFullyCollapsed()) {
animateCloseQs(true /* animateAway */);
} else {
closeQs();
}
mNotificationStackScrollLayoutController.setOverScrollAmount(0f, true /* onTop */, animate,
!animate /* cancelAnimators */);
mNotificationStackScrollLayoutController.resetScrollPosition();
}
还有这个Android 10 禁止SystemUI 下拉状态栏,亲测这个可以。
@Override
public boolean panelEnabled() {
return mCommandQueue.panelsEnabled();
//返回false就可以禁止下拉状态栏
}