Android 关于全局页面无法点击的问题研究

这个功能用于刷入的软件版本和硬件版本不匹配的时候,弹出一个页面,全局占满,提示文字信息,禁用此手机的所有功能(不响应界面的所有点击操作)。
我做的判断是,判断出来结果之后,弹出一个页面(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就可以禁止下拉状态栏
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值