Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法拦截覆盖上的触摸服务_Android_Android Layout_Android Service_Touch Event - Fatal编程技术网

Android 无法拦截覆盖上的触摸服务

Android 无法拦截覆盖上的触摸服务,android,android-layout,android-service,touch-event,Android,Android Layout,Android Service,Touch Event,我正在尝试使用服务和透明覆盖层阻止触摸设备。 该代码在android oreo上似乎运行良好,但在运行低于oreo的android版本的设备上无法正常运行 代码如下: private void setWindowParams(){ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { params = new WindowManager.LayoutParams(

我正在尝试使用服务和透明覆盖层阻止触摸设备。 该代码在android oreo上似乎运行良好,但在运行低于oreo的android版本的设备上无法正常运行 代码如下:

private void setWindowParams(){
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSLUCENT);
    } else {
        params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSLUCENT);
    }
    wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    FrameLayout noTouchUi = new FrameLayout(this);
    wm.addView(noTouchUi,params);

}
在这里,我设置了一个FrameLayout
noTouchUi
,使用
onTouchListener

        noTouchUi.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Log.d(TAG,"touch event");
            return true;
        }
    });

这在安卓8上正常工作,但在安卓7上不工作,覆盖显示正常,但覆盖后面的项目被点击。我想做的是阻止点击。

谢谢你,我自己找到了答案。 从更改类型
WindowManager.LayoutParams.TYPE\u SYSTEM\u OVERLAY
WindowManager.LayoutParams.TYPE\u PHONE
以及撤旗
WindowManager.LayoutParams.FLAG\u NOT\u TOUCH\u MODAL
WindowManager.LayoutParams.FLAG\u WATCH\u OUTSIDE\u TOUCH
成功了