Как передать событие изменения близости

У меня есть широковещательный приемник для изменения состояния телефона, и когда состояние телефона «OFFHOOK», я регистрирую прослушиватель событий для датчика приближения. Когда близость меняется, я что-то делаю (я делаю регистрацию и «что-то» в службе, если это имеет значение). Пока все работает так, как ожидалось. Проблема в том, что экран не блокируется, когда значение близости равно «ЗАКРЫТО». Я думаю, это потому, что мой слушатель улавливает событие изменения близости, и поэтому приложение телефона по умолчанию не получает событие. Есть ли способ передать событие, например «вернуть ложь» в onClickListener() кнопок.

редактировать:

Коды

При создании сервиса

        myProximitySensor = mySensorManager
                .getDefaultSensor(Sensor.TYPE_PROXIMITY);
        mySensorManager.registerListener(this, myProximitySensor,
            SensorManager.SENSOR_DELAY_NORMAL);

Я реализовал SensorEventListener и в его методе onSensorChanged():

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    audioManager.setSpeakerphoneOn(true);

person Savin    schedule 17.10.2012    source источник
comment
не могли бы вы опубликовать код?   -  person Ridcully    schedule 17.10.2012
comment
Вопреки тому, что вы предполагаете, событие близости НЕ потребляется. Все зарегистрированные прослушиватели событий получат событие. Так что не надо переходить. Возможно, приложение/служба держит блокировку пробуждения, которая поддерживает/включает экран устройства. Хм?...   -  person TheCodeArtist    schedule 17.10.2012
comment
@TheCodeArtist Спасибо за ответ. Как вы думаете, вызывает ли проблема вызов службы с широковещательного приемника?   -  person Savin    schedule 17.10.2012
comment
никакая wakelock не запрашивается и не освобождается. Проблема обнаружена, благодаря вам. Я использую AudioManager, чтобы включить громкую связь, когда телефон находится вдали от пользователя. Когда я прокомментировал код AudioManager, блокировка экрана работает. Есть ли способ, которым я могу это сделать? включить громкую связь без этого эффекта «экран не блокируется»?   -  person Savin    schedule 17.10.2012
comment
если быть точным, audioManager.setSpeakerphoneOn(state); код вызывает проблемы.   -  person Savin    schedule 17.10.2012


Ответы (1)


Если вы хотите заблокировать экран при изменении прослушивателя близости, вы можете иметь экземпляр PowerManager.WakeLock и вызывать его для блокировки сцены, а затем вызывать отпустить, чтобы снова разблокировать экран.

person Omar Ahmed    schedule 13.02.2018
comment
Добро пожаловать в Stack Overflow. Пожалуйста, просмотрите Как написать хороший ответ< /а>. - person Rick; 13.02.2018