Как прочитать датчик давления?

Физическое нажатие кнопки «Домой» можно легко обнаружить на большинстве устройств:

...

public class ExampleAccessibilityService extends AccessibilityService {

    ...

    @Override
    protected boolean onKeyEvent(KeyEvent event) {    
        if (event.getKeyCode() == KEYCODE_HOME && event.getAction() == ACTION_DOWN)
            Log.d("Example", "The home key is pressed.");
        return super.onKeyEvent(event);
    }
}

Но приведенный выше код не работает на некоторых устройствах с чувствительной к давлению виртуальной кнопкой «Домой». Я предполагаю, что эти устройства Samsung Galaxy затронуты: S8, S8+, S9, S9+, Note10, Note10+ и Fold. Официально он считается датчиком давления, а не кнопкой.

 Скриншот со спецификациями Samsung Galaxy S9 и S9+ на https://www.samsung.com/global/galaxy/galaxy-s9/specs/. Датчики: диафрагма, отпечаток пальца, частота пульса, давление (!), гироскоп, приближение, акселерометр  , Геомагнитная, RGB-подсветка, Барометр, Датчик Холла. Кнопки: Вкл./Выкл., Громкость, Bixby. (Кнопки «Домой» нет в списке.)

Как прочитать этот датчик?

TYPE_PRESSURE событие датчика связано с барометром, показывает давление окружающего воздуха в гПа или мбар.

getPressure()метод возвращает "размер емкостного объекта, а не буквальное давление".

Мне не нужна информация об уровне давления, я просто хочу знать, нажата ли чувствительная к давлению кнопка виртуального дома.


person Tamás Bolvári    schedule 05.04.2020    source источник


Ответы (2)


Технически он не считается датчиком, поэтому его нельзя использовать, насколько мне известно.

for (Sensor s : ((SensorManager) getSystemService(SENSOR_SERVICE)).getSensorList(Sensor.TYPE_ALL))
        Log.d("Sensor", s.getName());

Я зарегистрировал все доступные датчики устройства с кнопкой виртуального дома, чувствительной к давлению, но этой кнопки нет в списке. Интересно, Как получить доступ к датчикам, не указанным в SensorManager?

person Tamás Bolvári    schedule 07.04.2020
comment
Таким образом, его можно нажимать как кнопку, заставляет устройство вести себя так, как если бы была нажата кнопка «Домой», но он считается датчиком, а не кнопкой... Но к нему нельзя получить доступ с помощью SensorManager, в то время как все остальные датчики могут , так что технически это не считается датчиком ... Мне не нравится, как Samsung дает мне понять, что пытается избавиться от этой кнопки / датчика. Пока он есть, он должен работать. - person Tamás Bolvári; 07.04.2020

Эта виртуальная кнопка не предназначена для использования приложением, и к ней можно получить доступ только с этого ПЗУ Samsung. Можно определить давление, необходимое для его срабатывания. Какой смысл вообще это читать? В вашем устройстве нет датчика давления, он же барометр. Вы имеете в виду сенсорный экран, чувствительный к давлению, и поэтому единственный шанс прочитать его может быть драйвером сенсорного экрана.

Это источники их двоичных файлов поставщиков для AOSP. Если не создать собственное ПЗУ, вероятно, нет способа привязать пользовательские функции к сенсорному экрану или предоставить значение для SDK. Эти источники также должны показывать, что на самом деле делает виртуальная кнопка, помимо эмуляции события аппаратной кнопки.

person Martin Zeitler    schedule 07.04.2020
comment
Samsung не хочет, чтобы мое приложение использовало кнопку «Домой», я понимаю. Как я понимаю, они хотят, чтобы доступ к нему был только у Samsung ROM. Но моему приложению нужна эта кнопка, поэтому меня не волнуют намерения Samsung. Должен быть способ заставить его работать, даже если он хакерский или недокументированный. - person Tamás Bolvári; 07.04.2020
comment
Смысл использования кнопки «Домой» — это доступность. Мой AccessibilityService помогает пользователю управлять устройством, так что он может просто нажать кнопку «Домой», чтобы изменить настройки, вместо того, чтобы разблокировать устройство и копаться в системных настройках и т. д. - person Tamás Bolvári; 07.04.2020
comment
В устройстве есть датчик давления и барометр. Пожалуйста, проверьте скриншот в моем вопросе на официальной странице Samsung. Терминология действительно сбивает с толку. Обычно датчик давления является синонимом бароматера. Но в данном случае это относится к чувствительной к давлению кнопке виртуального дома. Это датчик давления. Он не измеряет атмосферное давление. Он измеряет, нажата ли кнопка «Домой». - person Tamás Bolvári; 07.04.2020
comment
Какую часть исходного кода я должен прочитать, чтобы увидеть, что на самом деле делает виртуальная кнопка, помимо эмуляции события аппаратной кнопки? Я слишком новичок, чтобы найти соответствующие строки в таком большом архиве кода. (Считается ли это эмуляцией, несмотря на отсутствие KEYCODE_HOME типа KeyEvent?) - person Tamás Bolvári; 07.04.2020
comment
Пользователь должен иметь возможность удобно пользоваться кнопкой «Домой», не разблокируя устройство, даже если он в перчатках, а экран мокрый или выключен. Так что моему приложению действительно нужно использовать датчик давления (не барометр, а тот, что установлен под дисплеем как домашняя клавиша). - person Tamás Bolvári; 07.04.2020