Как определить вырез экрана (вырез) и получить его высоту? - PullRequest
0 голосов
/ 22 апреля 2020

Мне нужно получить точные координаты точки относительно экрана независимо от размеров окна приложения или смещений / вставок. Телефон, на котором я работаю, имеет разрешение 1080x2280 и android 9. Я попытался найти размеры экрана, используя getDefaultDisply, но высота надреза вычитается из экрана:

// Testing with notch hidden; the screen is pushed down below it
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); // 1080x2062 (-notification bar height!)
getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics); // 1080x2192 (actual window height when notch is hidden)

Как получить реальное разрешение и высоту метки, когда она скрыта?

1 Ответ

0 голосов
/ 23 апреля 2020

Я нашел свое собственное решение, которое работает только на рутованных устройствах (требуется Shell библиотека):

public static int getCutoutHeight() {
    CommandResult result = Shell.SU.run("dumpsys display | grep mCurrentDisplayRect");
    String output = result.getStdout();
    String regex = "^\\s+mCurrentDisplayRect=Rect\\(\\d+, (\\d+) - \\d+, \\d+\\)*$";
    if (output != null) {
        if (output.matches(regex)) {
            Pattern patt = Pattern.compile(regex);
            Matcher matcher = patt.matcher(output);
            if (matcher.find()) {
                return Integer.parseInt(matcher.group(1));
            }
        }
        else Log.e(TAG, "Unexpedted outptu: " + output);
    }
    else Log.e(TAG, "Command failed: " + result.getStderr());
    return 0;
}

Надеюсь, скоро появится лучший ответ.

...