Ищите хорошее решение для рефакторинга архитектуры BLE Android GATT (Bluetooth Low Energy) - PullRequest
0 голосов
/ 26 сентября 2019

Я ищу хорошее решение для рефакторинга архитектуры BLE, которое было разработано моим коллегой.Область действия кода заключается в том, чтобы поместить соединение GATT в Службу, но ничего не делать с жизненным циклом Службы. Ниже приведено описание onStartCommand Службы:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return super.onStartCommand(intent, flags, startId);
} 

, тогда код выглядит следующим образомгенерация общедоступной функции с именем «connect» в Сервис для подключения GATT через контекст Сервиса, ниже эта функция выглядит следующим образом:

public boolean connect(String address) {
    if (mBluetoothAdapter == null || address == null) {
        return false;
    }
    BluetoothGatt bluetoothGatt = null;

    BluetoothDevice bluetoothDevice = mBluetoothAdapter.getRemoteDevice(address);
    if (bluetoothDevice == null) {
        Log.w(TAG, "Device not found.  Unable to connect.");
        return false;
    }
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        bluetoothGatt = bluetoothDevice.connectGatt(this, false, createGattCallback(address));
    } else {
        bluetoothGatt = bluetoothDevice.connectGatt(this, false, createGattCallback(address), 
    BluetoothDevice.TRANSPORT_LE);
        if (null != bluetoothGatt)
            bluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH);
    }
    return true;
}

ну, это очень странно для меня, потому что все звучит так "Вы никогда не используете жизненный цикл Сервиса, но всегда используете контекст Сервиса. "

И затем код сохраняет объект gatt как переменную-член в Сервисе, пока соединение BLE не будет разорвано, также генерируетнекоторые общедоступные методы, такие как написание характеристики и разъединение для связи с устройством Bluetooth через объект gatt, поэтому я думаю, что весь код ничего не использует в функции Service, а только вводит некоторые открытые методы в Service.

У меня есть несколько вопросовниже:

  1. Должен ли я объединить архитектуру Гатта в Сервис?
  2. Как я уже упоминал выше, Гатт использовал контекст Сервиса, что если я сохраню код в таком виде и что произойдет, когда Сервис будет уничтоженно Гатт все еще подключен?
  3. Есть ли хорошая идея для архитектуры ГАТТ?
...