Возможно ли вызвать обратный вызов, когда устройство находится в спящем режиме, без блокировки пробуждения?

Я хочу отслеживать соединение с устройством BLE, даже когда телефон переходит в спящий режим - есть обратный вызов для отслеживания подключения/отключения BluetoothGattCallback.

Итак, в учебнике сверху есть Service

public class BluetoothLeService extends Service {

    private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
            //...
        }

        //...
    }

    //...
}

Для подключения я звоню

mBluetoothGatt = device.connectGatt(this, false, mGattCallback);

Как видите, я нигде не устанавливаю блокировку слежения.

  1. Итак, что происходит с обратным вызовом, если устройство переходит в спящий режим?
  2. Будет ли это называться? Или мне нужно явно получить блокировку пробуждения.
  3. Или, может быть, BluetoothDevice заботится о пробуждении устройства при вызове обратного вызова? (однако я вижу, что это нигде не задокументировано)

person Marian Paździoch    schedule 18.03.2015    source источник


Ответы (2)


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

Я думаю, вам не нужно беспокоиться о блокировке пробуждения для этого, так как система «проснется сама» для вас. Я бы сказал, что у вашего Сервиса будет больше шансов не быть остановленным системой, если у вас будет блокировка пробуждения, но это будет стоить вам драгоценное время автономной работы и дополнительные разрешения

имея это в виду, а также зная, что "худшее" может случиться, это то, что ваш сервис будет остановлен, что приводит к выводу, что вместо решения этой проблемы с помощью wake lock можно решить гораздо более простым способом: выполните gatt соединение, когда служба перезапустится! (вы должны запустить его как липкое для этого). таким образом вы сэкономите время автономной работы и не будете поддерживать активность процессора.

Я делаю из своего приложения постоянное фоновое периодическое сканирование BLE и подключаюсь к службам GATT из класса Android Service, и я не сталкивался с какими-либо проблемами, о которых вы беспокоитесь.

поэтому я бы посоветовал вам не беспокоиться об этом, пока вы не столкнетесь с конкретной проблемой.

person Tal Kanel    schedule 27.03.2015

@Tal Kanel абсолютно прав, вам не нужно беспокоиться о том, что устройство находится в глубоком сне здесь, потому что потоки связывания службы gatt, которые доставляют результат, вызывая BluetoothGattCallback, разбудят ваше приложение. Но вам все еще нужно иметь службу Android, чтобы ваше приложение работало в фоновом режиме.

person kaps    schedule 01.04.2015
comment
если можно, то предоставьте код AOSP, где можно посмотреть, будит ли он процессор. - person Marian Paździoch; 02.04.2015
comment
Явного пробуждения процессора программно нет. Насколько я понимаю, чип BLE пробуждает потоки хоста, доставляя события подключения и индикации. И, в свою очередь, хост пробуждает потоки связывателя GattService, ожидающие указаний/событий соединения, а затем эти потоки связывателя доставляют результаты в приложение. В нашем приложении также требуется длительное подключение, и наше периферийное устройство продолжает отправлять данные в центральную каждую минуту, которые, как и ожидалось, принимаются приложением даже в глубоком сне. - person kaps; 03.04.2015