关闭应用程序后坚持BLE连接和访问服务

时间:2018-09-19 19:43:17

标签: android bluetooth-lowenergy

我正在使用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 ...

1 个答案:

答案 0 :(得分:0)

显然,问题出在我与GATT服务的连接方式上。我有:source ~/.vimrc 可以自动连接。我更改了它,现在可以使用:

false