Подтвердить что ты не робот

Android обнаруживает или блокирует плавающие/накладывающиеся приложения

Android позволяет приложениям рисовать поверх других приложений с помощью android.permission.SYSTEM_ALERT_WINDOW, и это называется плавающим/оверлейным приложением. Например, Facebook Messenger всегда видит частые пузыри по краям экрана.

Мой вопрос: можно ли обнаружить или заблокировать в Java-коде любое приложение, которое рисует мое приложение?

4b9b3361

Ответ 1

Существует метод View#onFilterTouchEventForSecurity(), который вы можете переопределить, чтобы определить, имеет ли событие движения FLAG_WINDOW_IS_OBSCURED. Это даст вам знать, если что-то нарисовано поверх вашего представления.

@Override
public boolean onFilterTouchEventForSecurity(MotionEvent event) {
    if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) == MotionEvent.FLAG_WINDOW_IS_OBSCURED){
        // show error message
        return false;
    }
    return super.onFilterTouchEventForSecurity(event);
}

Если вы просто хотите защитить свое приложение от крана, связанного с подключением, из-за другого приложения, использующего ваше приложение, вы можете добавить setFilterTouchesWhenObscured к своим представлениям через XML или программно.