相关疑难解决方法(0)

如何防止BluetoothGattCallback一次多次执行

我有一个服务有一个实例 BluetoothGattCallback

public class MyService extends Service {

    private BluetoothGattCallback callback;

    @Override
    public void onCreate() {
            super.onCreate();

            callback = new BluetoothGattCallback() {
                      @Override
                      public synchronized void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
                              Log.i("onConnectionStateChanged", "Status " + status);                
                              Log.i("onConnectionStateChanged", "New State " + newState);                
                      }
            };
    }

    // registration of bluetooth adapter and blah blah blah


}
Run Code Online (Sandbox Code Playgroud)

当我启动应用程序时,它工作正常,回调只被调用一次,但经过几次尝试,它被调用两次.

样本日志

10-22 13:29:18.731 26944-26961/redacted.lollipop I/onConnectionStateChange: Status 0
10-22 13:29:18.731 26944-26961/redacted.lollipop I/onConnectionStateChange: New State 2
10-22 13:29:18.731 26944-26961/redacted.lollipop I/onConnectionStateChange: Status 0
10-22 13:29:18.731 …
Run Code Online (Sandbox Code Playgroud)

android bluetooth-lowenergy android-5.1.1-lollipop

5
推荐指数
1
解决办法
3118
查看次数

BLE设备与同一设备上的不同Android应用程序之间的通信

我是Android BLE的新手,所以我的问题在某种程度上可能是不正确的或天真的.如果是这种情况,请向我解释我错在哪里,并告诉我管理这种情况的正确方法.

场景如下:我的Android应用程序与BLE设备通信,使用BLE特性发送命令并从设备获取答案.

顺序是:

  • 设备唤醒应用程序(该onConnectionStateChange方法被调用)
  • 我的应用程序在一个特性中写入一个命令(我writeCharacteristic将命令放在value参数中).
  • 设备将命令的答案发送回我的应用程序(onCharacteristicChanged方法被触发,value参数包含答案)

唤醒应用程序后,设备在发送命令之前不会执行任何操作writeCharacteristic.设备接受不同的命令.

到目前为止一切都很好,但最近我开发了第二个不同的应用程序与同一设备进行通信.

当我在同一个Android手机上运行这两个应用程序时,一个应用程序会向设备发送命令,并且两个应用程序都会收到响应!当然,未发送命令的应用程序会收到意外的答案并进入意外状态.

好的,知道问题我可以修改我的应用程序来处理这种情况,但问题是:当同一设备中的两个应用程序与同一个BLE设备通信时,这种行为是否正常?

有没有办法让应用程序与BLE设备建立通信通道,以避免将特定命令的答案发送到除发送请求的应用程序之外的任何其他应用程序?

我的猜测是,writeCharacteristiconNotificationChanged没有对此类通信的权利的功能,但在这种情况下,该选择呢?

java android bluetooth-lowenergy android-bluetooth bluetooth-gatt

5
推荐指数
1
解决办法
358
查看次数