Как блокировать обработку касаний экрана в определенной области на уровне системы Android?

Для блокировки обработки касаний экрана в определенной области на уровне системы Android можно использовать системное окно.

Системное окно позволяет отрисовывать пользовательский интерфейс поверх всех других окон и предоставляет возможность перехватывать и обрабатывать события касания экрана.

Для создания системного окна с возможностью блокировки обработки касаний необходимо выполнить следующие шаги:

1. Создать новый класс, который будет расширять класс Service. Назовем его, например, TouchBlockService. В этом классе мы будем создавать системное окно и обрабатывать касания экрана.

Пример кода TouchBlockService:

public class TouchBlockService extends Service {

    private WindowManager windowManager;
    private View touchBlockView;

    @Override
    public void onCreate() {
        super.onCreate();

        // Получаем WindowManager
        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

        // Создаем новое системное окно
        touchBlockView = new View(this);
        touchBlockView.setBackgroundColor(Color.TRANSPARENT);

        // Задаем параметры для окна
        WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
                WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT
        );

        // Добавляем окно на экран
        windowManager.addView(touchBlockView, layoutParams);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        // Удаляем системное окно при остановке сервиса
        if (windowManager != null && touchBlockView != null) {
            windowManager.removeView(touchBlockView);
        }
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

2. Добавить объявление службы в файле манифеста (AndroidManifest.xml):

<service android:name=".TouchBlockService" />

3. Запустить службу из вашего активити или фрагмента, используя следующий код:

Intent intent = new Intent(this, TouchBlockService.class);
startService(intent);

После запуска службы системное окно будет отображаться поверх всех других окон и перехватывать все события касания экрана в указанной области. Заданные параметры для окна WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE и WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE позволяют избежать обработки событий касания и фокусировки на нем.

Пожалуйста, обратите внимание, что использование системного окна требует наличия разрешения android.permission.SYSTEM_ALERT_WINDOW в манифесте приложения.