我正在使用BLE设备开发应用程序。一切正常,除了在应用程序关闭后维护BLE连接方面遇到问题。
我正在使用Bind Service +开始使用前台服务和通知粘性。打开应用程序时,我叫bindService()
。
问题在于,如果我不打disconnect()
和gatt.close()
,则第二次打开应用程序时,由于onAutoConnectionStatusCb()status =10
,我无法访问BLE设备
由于我已经在运行该服务,因此不需要再次调用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
...
答案 0 :(得分:0)
显然,问题出在我与GATT服务的连接方式上。我有:source ~/.vimrc
可以自动连接。我更改了它,现在可以使用:
false