Сохранение соединения BLE и доступ к сервису после закрытия приложения - PullRequest
0 голосов
/ 19 сентября 2018

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

Я использую Bind Service + Start, привязанный к службе переднего плана и уведомлению.Когда я открываю приложение, я звоню bindService().

Проблема в том, что, если я не позвоню disconnect() и gatt.close(), во второй раз, когда я открываю приложение, я не могу получить доступ к устройству BLE из-за onAutoConnectionStatusCb()status =10 Так как у меня уже запущена службаМне больше не нужно вызывать bindService(), но в этом случае у меня больше нет экземпляра службы, поэтому мои BroadcastReceivers не вызываются.

Как мне обойти это?

Вот как я запускаю свой сервис:

private final Runnable mStartGattRunnable = new Runnable() {
    @Override
    public void run() {
        Intent gattServiceIntent = new Intent(mContext, BluetoothLeService.class);
        gattServiceIntent.putExtra(Consts.DEVICE_ADDRESS, mDeviceAddress);
        gattServiceIntent.setAction(Consts.STARTFOREGROUND_ACTION);

        mContext.startService(gattServiceIntent);

        if (mContext.bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE))
            CONNECTED = true;
    }
};

Вот так я получаю свой экземпляр сервиса:

    @Override
    public void onServiceConnected(ComponentName componentName, IBinder service) {
        Log.d(TAG, "onServiceConnected()");
        mBluetoothLeService = ((BluetoothLeService.LocalBinder) service).getService();
        if (!mBluetoothLeService.initialize()) {
            Log.e(TAG, "Unable to initialize Bluetooth");

        }
        // Automatically connects to the device upon successful start-up initialization.
        mBluetoothLeService.connect(mDeviceAddress);

        swipeContainer.setRefreshing(true);
    }

Когда я закрываю свое приложение, я не отключаю и не закрываю соединение.

При втором запуске приложения, если я снова позвоню bindService(), BLE застревает.Я не смогу снова получить доступ к mBluetoothLeService ...

1 Ответ

0 голосов
/ 19 сентября 2018

Видимо проблема была в том, как я подключался к сервису ГАТТ.У меня было false для автоматического подключения.Я изменил его, и теперь он работает:

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
        mBluetoothGatt = device.connectGatt(this, true, mGattCallback, 2);
    else
        mBluetoothGatt = device.connectGatt(this, true, mGattCallback);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...