我已经将通知设置到android中,它没有调用方法onCharacteristicRead()????它不进入该功能。为什么会这样??
非常感谢您的帮助
请求解决方案。
这是我的代码:
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status,
int newState) {
if (newState == BluetoothProfile.STATE_CONNECTED) {
Log.i(TAG, "Connected to GATT server.");
// Attempts to discover services after successful connection.
Log.i(TAG, "Attempting to start service discovery:"
+ mBluetoothGatt.discoverServices());
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
Log.i(TAG, "Disconnected from GATT server.");
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
gattServices = mBluetoothGatt
.getService(SampleGattAttributes.SERVICES_UUID);
if (gattServices != null) {
gattCharacteristics = gattServices
.getCharacteristic(SampleGattAttributes.CHARACTERISTIC_UUID);
System.out.println("character-->" + gattCharacteristics);
}
if (gattCharacteristics != null) {
System.out.println("Characteristic not null");
System.out.println("Characteristic Properties-->"
+ gattCharacteristics.getProperties());
mBluetoothGatt.setCharacteristicNotification(gattCharacteristics,
true);
}
} else {
Log.w(TAG, "onServicesDiscovered received: " + status);
}
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic, int status) {
System.out.println("in read");
if (status == BluetoothGatt.GATT_SUCCESS) {
byte[] data = characteristic.getValue();
System.out.println("reading");
System.out.println(new String(data));
}
}
@Override
public void onCharacteristicChanged(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic) {
//
System.out.println("change");
byte[] data = characteristic.getValue();
System.out.println(new String(data));
}
};
提前谢谢!!
首先,如果您通过以下方式读取特征,onCharacteristicRead将触发:
mBluetoothGatt.readCharacteristic(characteristic);
读取特征和设置通知是两码事。您想从哪些类型的特征中获取数据?
是不是:
如果它是read
,您可以使用mBluetoothGatt.read特性(特性);
方法读取特性,但如果它的通知
或指示
首先,您必须通过调用读取特性的描述符
:
mBluetoothGatt.readDescriptor(ccc);
读取后,它应该通过调用onDescriptorRead回调返回数据
在这里,您可以通过通知或指示来设置(订阅)charactersitic,方法是调用:
mBluetoothGatt.setCharacteristicNotification(characteristic, true)
一旦返回true,您将需要再次写入描述符(通知或指示的值)
BluetoothGattDescriptor clientConfig = characteristic.getDescriptor(CCC);
clientConfig.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
// or
//clientConfig.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
mBluetoothGatt.writeDescriptor(clientConfig);
完成此操作后,每次特性更改时,您都会通过onCharacteristicChanged回调收到通知。
您可以在此处阅读有关Android上蓝牙连接的更多信息,以及有关蓝牙特性的更多信息
问题内容: 我已经将通知设置为android,它不是在调用方法???? 它不进入该功能。为什么会这样呢? 任何帮助表示赞赏 要求解决方案。 这是我的代码: 先感谢您!! 问题答案: 首先,如果您通过以下方式阅读了特征,将触发: 读取特征和设置通知是两件事。您要从中获取数据的特征的类型是什么? 是吗: 读 通知 表明 如果是,则可以使用方法读取特征,但如果是或首先,则必须通过调用以下方法来读取特征:
我正试图在一个项目中实现蓝牙(BLE)网关,以便在硬件和带有应用程序的移动设备之间传输数据。硬件不是唯一的,它可以批量生产,控制器中有相同的程序。 如果制作了100个硬件产品,并排通电,那么设置BLE广播的信息以进行广告的最佳方式是什么,以便移动设备可以接收该信息,并且在任何时候只能连接1个硬件和移动设备。 例如,如果您同时拥有3个相同的健身跟踪手表,并且您只想连接其中一个,那么如何区分手机蓝牙配
蓝牙协议栈-BLE地址类型 一个BLE设备,可以使用两种类型的地址(一个BLE设备可同时具备两种地址 Public Device Address Random Device Address 而Random Device Address又分为Static Device Address和Private Device Address两类 其中Private Device Address又可以分为Non-
我试图用BLE API扫描附近的蓝牙设备,但它似乎不起作用 我已经在清单中添加了权限 以下内容在创建对象时 创建扫描仪回调对象并进一步扫描 在logcat中,我只看到以下内容 这是我的app build gradle } 有人能指出我在这里遗漏了什么吗?
我是新来的JavaScript,所以我可能有一些非常规的编程方式。也就是说,我正在做一个项目,我需要读写数据到自定义BLE设备。我使用gatt服务器协议进行连接。我能够与设备连接,但现在我试图从寄存器中读取数据。 我看了从谷歌以及网络蓝牙github的网络样本,但我无法理解它。下面的代码是我目前试图打破这一点。早期的尝试让我陷入了这样一个事实,即我得到的值是一个对象或一个promise对象。
jd.closeBluetoothAdapter(Object object) 关闭蓝牙模块。调用该方法将断开所有已建立的连接并释放系统资源。建议在使用蓝牙流程后,与 jd.openBluetoothAdapter 成对调用。 参数 Object object 属性 类型 默认值 必填 说明 success function 否 接口调用成功的回调函数 fail function 否 接口调用失败