Я работаю над приложением с устройством 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
...