首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android BLE:成功将ENABLE_NOTIFICATION_VALUE值写入BluetoothGattDescriptor,但onCharacteristicChanged从不触发

Android BLE是指Android平台上的蓝牙低功耗(Bluetooth Low Energy)技术。它是一种无线通信技术,旨在提供低功耗和短距离通信,适用于物联网设备、传感器和移动应用等场景。

针对你提到的问题,成功将ENABLE_NOTIFICATION_VALUE值写入BluetoothGattDescriptor,但onCharacteristicChanged从不触发的情况,可能有以下几个可能的原因和解决方法:

  1. 检查UUID匹配:确保你在写入BluetoothGattDescriptor时使用的UUID与特征值(Characteristic)的UUID匹配。如果UUID不匹配,onCharacteristicChanged方法将不会触发。可以通过调试或打印相关UUID来确认匹配。
  2. 检查特征值属性:在写入BluetoothGattDescriptor之前,确保相关特征值的属性已正确设置。通常,启用通知(Notification)需要将特征值的属性设置为PROPERTY_NOTIFY或PROPERTY_INDICATE。可以通过调用BluetoothGattCharacteristic的setProperties方法设置属性。
  3. 检查权限和状态:确保你的应用程序具有适当的权限和蓝牙状态。在AndroidManifest.xml文件中添加BLUETOOTH和BLUETOOTH_ADMIN权限,并在代码中检查蓝牙是否已启用。
  4. 检查连接状态:在写入BluetoothGattDescriptor之前,确保你的设备已成功连接到远程设备。可以通过BluetoothGatt的连接回调方法(onConnectionStateChange)来检查连接状态。
  5. 检查回调注册:确保你已正确注册了BluetoothGattCallback回调。在调用BluetoothGatt的connect方法之前,使用BluetoothGattCallback的实例注册回调。

如果上述解决方法都没有解决问题,可能是由于其他原因导致的。可以尝试使用Android的蓝牙调试工具或日志记录来进一步排查问题。

腾讯云提供了一系列与物联网相关的产品和服务,例如物联网通信平台(IoT Hub)、物联网设备管理(Device Management)、物联网数据开发套件(IoT Explorer)等。你可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多相关产品和详细信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android使用BLE(低功耗蓝牙,Bluetooth Low Energy)

角色和责任 以下是Android设备与BLE设备交互时的角色和责任: *中央 VS 外围设备。 适用于BLE连接本身。中央设备扫描,寻找广播;外围设备发出广播。...但是你可以自己设计android app去扮演GATT服务端角色 设备对BLE的支持 分为两种情况 * 目标设备是否支持BLE * Android手机是否支持BLE 目标设备是否支持要看具体目标设备的情况...android:required="true"/> 代码中判断手机是否支持BLE特性: // 使用此检查确定BLE是否支持在设备上,然后你可以有选择性禁用BLE相关的功能 if (!...2.在回调方法的 onConnectionStateChange 中,我们可以通过 status 判断是否GATT连接成功 3.在GATT连接建立成功后,我们调用 mBluetoothGatt.discoverServices...当这个特征里的数据发生变化(接收到数据了),会触发 回调方法的 onCharacteristicChanged 方法。我们在这个回调方法中读取数据。

3.1K00

MASA MAUI Plugin 安卓蓝牙低功耗(二)蓝牙通讯

在我们向设备特征发送数据时,会触发OnCharacteristicWrite方法,方法内部触发我们自定义的CharacteristicWrite。...写入蓝牙指令 官方文档示例中没有给出特征写入的示例,这里我们自己实现。...想对蓝牙进行写入操作,当然需要先找到蓝牙设备的服务id和特征id才行。...一个BLE设备如果有通知的属性,那么他一定会有描述符,打开或者关闭通知都需要通过描述符写入指令来控制,所有对特征的操作然后通过WriteValueAsync->PlatformWriteValue来实现...写入数据、打开通知监听,最后还剩一个就是监听特征的变化,为某个特征启用通知后,如果远程设备上的特征发生更改(我们收到消息),则会触发 onCharacteristicChanged() 回调: JAVA

2K20

Android Ble蓝牙App(五)数据操作

单次数据传输:Ble Read操作一次只能读取一个数据或一个数据块。如果需要读取多个数据,客户端需要连续发送多个读取请求。 数据的访问权限:Ble Read操作只能读取具有权限允许的数据。...writeCharacteristic(characteristic) } //执行写入动作成功不代表写入数据成功,执行写入动作失败,写入数据一定失败 deviceInfo...,再根据Android的版本去写入数据,最终调用Gatt的writeCharacteristic()函数进行写入写入属于一个执行动作,有失败的可能性,可以根据返回进行判断,Android13以前返回的是...执行之后如果成功了,则会触发GattCallback的onCharacteristicWrite()回调,下面在BleGattCallback中重写这个函数,代码如下所示: override...我们再看一下控制台日志   可以看到在执行写入动作成功之后,就收到了设备所回复的特征数据,然后再是收到写入成功的日志打印。

96030

Android BLE 快速上手指南

-->获取服务,特征-->打开通知-->写特征-->读特征-->断开连接,通过这些步骤我们就能学会Android Ble 的基本方法的使用。...,返回其他就是各种异常 //newState:当前连接处于的状态,例如连接成功,断开连接等 //当连接状态改变时触发此回调 } @Override...,返回其他就是各种异常 //成功获取服务时触发此回调,“获取服务,特征”一节会介绍 } @Override public void onCharacteristicRead...//characteristic:特征改变的特征 //当特征改变时触发此回调,“打开通知”一节会介绍 } @Override public void...如果大家需要了解更多更详细的使用方法,这里给大家推荐2个开源的ble库: Android-BLE-Library:NordicSemiconductor官方的Android ble库。

2.4K20

一步一步实现Android低功耗蓝牙(BLE)基本开发

BLE开发需要Android 4.3 (API level 18) 及以上 一.添加权限 为了能正常使用蓝牙相关功能(扫描等),首先需要添加以下权限: <uses-permission android...该方法接受三个参数:一个上下文对象、autoConnect(布尔表示是否在BLE设备可用时自动连接到该设备),以及对BluetoothGattCallback的引用: mBluetoothGatt =...Log.w(TAG, " --------- onServicesDiscovered received: " + status); } } 在上面的代码中,我们BLE...); mBluetoothGatt.writeDescriptor(descriptor); 3.监听数据变化 经过以上设置,我们就可以在onCharacteristicChanged回调方法中获取BLE...几点说明: 因为我这里需求是接入两个BLE设备,所以我抽取了一个BluetoothLeDeviceBase,代表基类设备,一些通用的属性和操作封装在了这里 BluetoothLeDeviceA,BluetoothLeDeviceB

1.9K40

Android 低功耗蓝牙开发(数据交互)

"写入初始化成功:" + command : "写入初始化失败:" + command); return result; }   下面解释一下这个方法的内容,首先通过服务UUID...最终通过setValue放入特性,然后通过写入特性传递给设备。然后返回一个boolean,这个只是表明写入特性的初始化成功,不代表就真的写入到设备中了,那么写入到设备成功的标识是什么呢?...这里当我们进行有响应的数据写入时,设备收到后会先触发onCharacteristicChanged然后再触发onCharacteristicWrite。...Phy读取和改变   首先来看这个的读取,比如我们在通知开启成功之后去读取这个设备的Phy 这个读取的方法要求你的Android版本必须要在8.0和8.0以上,因此如果你的Android设备是低版本的就不用考虑去使用这个...我是Android10.0所以没问题,调用这个方法API就会触发onPhyRead回调。我们在回调的时候打印一下内容,看看当前的硬件Phy是什么

1.9K30

低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端

低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端 Android对外模模式(peripheral)的支持 从Android5.0开始才支持 关键术语和概念 以下是关键BLE术语和概念的摘要...”android:required =“true”/> 不过,如果您想让应用程式适用于不支援BLE的装置,您仍应在应用的清单中加入这个元素,required="false"设为required="false...设备连接后,触发 AdvertiseCallback 的 onStartSuccess,我们在这之后,初始化GATT的服务 4.初始化GATT的服务 (1) 通过 mBluetoothManager.openGattServer...当回复响应成功后,客户端会读取然后触发本方法 * @param device * @param requestId * @param offset...: 触发回调方法 onDescriptorWriteRequest (2) 在 onDescriptorWriteRequest 方法中,执行下面的方法表示 写入成功 BluetoothGatt.GATT_SUCCESS

1.6K00

Android低功耗蓝牙BLE开发小结

BLE及相关协议 BLE是蓝牙4.0标准的一部分,旨在解决传统蓝牙连接慢、能耗大的问题,Google在Android 4.3(API 18)中引入了对BLE的支持。...GATT这些服务分组以封装设备的行为,并根据GATT功能描述用例,角色和一般行为。该框架定义了服务的过程,格式及其特征,包括发现、读取、写入、通知和指示特征,以及配置特征的广播。...扫描BLE设备 开始扫描 使用方法boolean startLeScan (BluetoothAdapter.LeScanCallback callback),该方法在API 21中已过时,若应用的目标版本超过..., boolean enable)设置某个特征是否通知,设置为true后,当属性变化,可在回调方法onCharacteristicChanged中执行相关操作。...读写、设置通知操作都需特征有对应的属性支持才能执行成功。 注意:如果开发中使用的是虚拟BLE设备,还需先设置虚拟设备中需要通知的特征的Descriptor为开启通知,后续才会收到通知事件。

5.5K561

Android 原生 BLE 开发

Android 开发 BLE 用第三方库是总是出现一些问题,最后还是硬着头皮改回原生 API。...android:name="android.permission.ACCESS_FINE_LOCATION"/> 设置BLE ---- 你的 app 能与 BLE 通信之前,你需要确认设备是否支持 BLE...如果不支持BLE,那么你应该适当地禁用部分BLE功能。如果支持BLE被禁用,你可以无需离开应用程序而要求用户启动蓝牙。使用BluetoothAdapter两步完成该设置。...这个方法需要三个参数:一个Context对象,自动连接(boolean,表示只要BLE设备可用是否自动连接到它),和BluetoothGattCallback调用。...(descriptor); 如果对一个特性启用通知,当远程蓝牙设备特性发送变化,回调函数 onCharacteristicChanged() 被触发

4K20

Android应用开发】Android 蓝牙低功耗 (BLE) ( 第一篇 . 概述 . 蓝牙低功耗文档 翻译)

:  -- 作用 : 描述符 被定义为一些属性, 这些属性用于描述 Characteristic (特性) 的.  -- 示例 : 例如, 一个 描述符 可以说明一个 可读的描述, 一个 特性的可接受范围...android:required="true"/> -- 不支持 BLE 关闭相关功能 : 如果 Android 手机不支持 BLE 功能, 你应该优雅的 关闭 BLE 相关功能.  -- 支持...ACTION_DATA_AVAILABLE, characteristic); } } ... }; ... } -- 广播发送 : 当一个特定的回调被触发...Activity { ... // 示范如何通过其所支持的 GATT 遍历 服务 (Services) 和 特性 (Characteristics) // 在这个示例中, 我们查询出的数据填充到...(descriptor); -- 特性改变回调 : 一特性开启了改变通知监听, 如果特性发生了改变, 就会回调 BluetoothGattCallback 接口中的 onCharacteristicChanged

5.7K30

Android BLE 蓝牙开发,连接蓝牙设备进行通讯

针对低功耗蓝牙通讯,Android 4.3(API 18)开始引入了 BLE 库。我们可以直接使用 Android SDK 中的蓝牙 BLE 库,而不用额外导入依赖库。...特征 Characteristic: 特征包含一个和 0 至多个描述特征的描述符。您可将特征理解为类型,后者与类类似。 描述符:描述符是描述特征的已定义属性。...-- 如果应用必须安装在支持蓝牙的设备上,可以下面的required的设置为true。...权限都申请可以说最稳妥了。 3.2 检测设备是否支持蓝牙 通常情况下,手机是有蓝牙的。而我们如果在其他 Android 系统的设备中,例如TV,平板,一体机等等。是否有蓝牙还真不能完整保证。...在注册消息监听,都是使用UUID是00002902-0000-1000-8000-00805f9b34fb进行的。这个是Android系统保留的。用于动态监听的。 你如果不想使用这个动态监听。

3K20

蓝牙项目开发心得

mBluetoothGatt.writeCharacteristic(characteristic);如果把命令成功写到发射器,会触发:BluetoothGattCallback的  onCharacteristicWrite...3,写到mSCharacteristic的没有转成十六进制字符串(二、4)导致写进去的是错误的 五、扫描广播、连接、绑定 1,Android手机为central,GATT client;发射器为peripheral...GATT client:这两种角色取决于BLE连接成功后,两个设备间通信的方式。两个设备通过BLE通信,首先需要建立GATT连接。...认证的过程比较繁琐,BLE协议支持两节点保存认证的安全密钥(一般是非易失性存储器中),以便于两节点下次连接后快速认证,这就是绑定技术 BLE蓝牙4.0经典问答【转】 - 逗不过奇葩 - 博客园  最清晰的关于蓝牙...ble的解答,适合初学者

1.7K90

物联网来了,你还不会蓝牙开发?

安卓4.3(API 18)为BLE的核心功能提供平台支持和API,App可以利用它来发现设备、查询服务和读写特性。相比传统的蓝牙,BLE更显著的特点是低功耗。...BluetoothAdapter ,通过BluetoothManager 获取 BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter(); BluetoothGattDescriptor...(characteristic, true); 该方法一般是在发现服务后,进行设置的,设置该方法的目的是让硬件在数据改变的时候,发送数据给app,app则通过onCharacteristicChanged...发送数据到蓝牙设备 这里可以通过调用BleManager中的sendData()方法即可,只需要传入指定的蓝牙设备地址以及需要发送的字节数组即可,返回是发送成功或者失败的布尔。...当设备连接成功之后并不代表就可以在此时发送数据,因为此时只是连接成功,并没有获取到蓝牙服务。必须要先通过gatt对象去获取服务discoverServices()在可以。

95720

Android BlueToothBLE入门(三)——数据的分包发送和接收(源码已更新)

——《微卡智享》 本文长度为3675字,预计阅读12分钟 前言 接上篇《Android BlueToothBLE入门(二)——设备的连接和通讯(附Demo源码地址)》最后提到过蓝牙BLE通讯每次默认发送的数据为...前面说过,BLE通讯默认是20字节,最大也只有512字节,所以既然申请MTU,那就往最大申请即可,代码中还是在当时BlueToothBLEUtil的类中先定义一个mtuSize,用于记录当前的mtu,...而数据接收到处理在Server中就写在BluetoothGattServerCallback回调的onCharacteristicWriteRequest中 //特征写入回调...serverViewModel.serverIntent.send( ServerIntent.Info( "${device.address} 请求写入特征...: UUID = ${characteristic.uuid} " + "写入 = ${readstr}"

1.4K10

Android BlueToothBLE入门(二)——设备的连接和通讯(附Demo源码地址)

实现效果 Android BLE Demo简介 http://mpvideo.qpic.cn/0bc35qahaaaa24ahdruagjsfb3gdodwaa4aa.f10002.mp4?...所以类中我们定义的服务UUID只是中间xxxx四位即可,写了一个函数来直接生成对应的UUID 代码中使用BLE蓝牙相关Api时,Android Studio会经常提示要先判断是否有蓝牙权限,所以这里也是把蓝牙是否做过初始化...import android.bluetooth.BluetoothGattDescriptor import android.bluetooth.BluetoothGattServer import...( getUUID(BLEDESCRIPTOR), BluetoothGattDescriptor.PERMISSION_READ or BluetoothGattDescriptor.PERMISSION_WRITE...为0禁用时间限制。(不设置则为无限广播时长) .setTimeout(Time) //设置广告类型是可连接还是不可连接。

60630

BLE低功耗蓝牙开发相关概念问题记录

关于ble通信的demo可以参考蓝牙API介绍及基本功能实现 Ble概念相关 ble对于数据的传输有一个字节上的限制,默认情况下是20个字节,并不是不可修改的。...监控超时(Supervision Timeout):两个成功连接事件间的最大允许间隔。如果超过了这个时间而没有任何连接事件即没有任何数据交换则断开连接。...主机主动读数据调用readCharacteristic方法,读之后会触发 onCharacteristicRead方法 主机主动写数据调用writeCharacteristic方法,写之后会触发 onCharacteristicWrite...方法(可以进行下一次的写数据) 主机被动获取到数据(从机通过notify方法发送数据),当监听到有数据过来时会触发 onCharacteristicChanged方法(但是要想该方法回调,必须在主机端程序中为要监听的...* Requires {@link android.Manifest.permission#BLUETOOTH}.

2.3K60
领券