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

BLE gatt.discoverServices()返回true,但从不触发回调

BLE(Bluetooth Low Energy)是一种低功耗蓝牙技术,用于在短距离范围内进行无线通信。gatt.discoverServices()是BLE连接中的一个方法,用于发现设备提供的服务。

当gatt.discoverServices()返回true但从不触发回调时,可能有以下几种可能的原因:

  1. 设备未正确连接:在调用gatt.discoverServices()之前,需要确保设备已经成功连接。可以通过监听连接状态的回调函数来确认连接是否成功。
  2. 设备未提供服务:如果设备未提供任何服务,调用gatt.discoverServices()将不会触发回调。可以通过检查设备的服务列表来确认设备是否提供服务。
  3. 设备连接不稳定:有时候设备的连接可能不稳定,可能会导致gatt.discoverServices()方法无法触发回调。可以尝试重新连接设备或者重启设备来解决连接稳定性问题。
  4. 设备权限限制:某些设备可能会限制对服务的访问权限,导致gatt.discoverServices()无法触发回调。可以检查设备的权限设置,确保应用程序有足够的权限来访问设备的服务。

推荐的腾讯云相关产品:腾讯云物联网通信(IoT Hub),该产品提供了一站式的物联网解决方案,包括设备管理、数据采集、消息通信等功能。您可以通过以下链接了解更多信息:https://cloud.tencent.com/product/iothub

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

相关·内容

10分钟完成一个最最简单的BLE蓝牙接收数据的DEMO

这两天在研究蓝牙,网上有关蓝牙的内容非常有限,Github上的蓝牙框架也很少很复杂,为此我特地写了一个最最简单的DEMO,实现BLE蓝牙接收数据的问题, 不需要什么特定的UUID, 不需要什么断开重连,...不需要什么多连接等等, 网上都把BLE蓝牙写的好复杂好复杂,那不是我想要的,我只想为新手提供一个最基本的例子 注意: 1.本DEMO运行前提是蓝牙已经配对成功,如果想实现自动配对可以期待我的下一篇文章...BluetoothGatt.STATE_CONNECTED == newState) { bluetoothGatt = gatt; gatt.discoverServices...= null) { success = gatt.setCharacteristicNotification(characteristic, true);...} } return characteristic; }} 对,就是这么简单,一个类足以,接下来就可以在Android studio的Logcat看到打印的返回值了

2.1K20

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

低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端 Android对外模模式(peripheral)的支持 从Android5.0开始才支持 关键术语和概念 以下是关键BLE术语和概念的摘要...”/> 不过,如果您想让应用程式适用于不支援BLE的装置,您仍应在应用的清单中加入这个元素,required="false"设为required="false" 。...回时间有:连接状态变化,收发消息,通知消息 /** * 服务事件的回 */ private BluetoothGattServerCallback bluetoothGattServerCallback...println("4.响应:" + str); showText("4.响应:" + str); } 交互流程: (1) 当客户端开始写入数据时: 触发回方法...bluetoothGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, offset, value); 执行 sendResponse后,会触发回方法

1.5K00

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

安卓4.3(API 18)为BLE的核心功能提供平台支持和API,App可以利用它来发现设备、查询服务和读写特性。相比传统的蓝牙,BLE更显著的特点是低功耗。...BluetoothGattCallback:已经连接上设备,对设备的某些操作后返回的结果。这里必须提醒下,已经连接上设备后的才可以返回,没有返回的认真看看有没有连接上设备。 3....gatt.readRemoteRssi() (8) executeReliableWrite对应onReliableWriteCompleted; (9) discoverServices对应onServicesDiscovered gatt.discoverServices...可随意实现自己需要的回方法 也就是说上面的那些回方法可以根据自己项目中的需求选择性实现 4 如何使用该库?...,这时可以根据自己的需求去设置通知Notify,如下图: 根据服务的UUID来进行过滤,然后根据服务获取到特征的UUID,然后在进行过滤,然后再从特征中取出通知的UUID,这时设置通知为true就可以了

94020

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

介绍 上一篇文章我们实现了蓝牙BLE的扫描功能,这里我们继续实现通讯功能。...换句话说我们可以通过这个特征给设备发送数据,而且可以通过订阅该特征值变化事件,来获取设备通过蓝牙的返回信息。与 BLE 设备交互的第一步便是连接到 GATT 服务器。...安卓蓝牙的写特征属性分为WRITE_TYPE_DEFAULT(写入)和WRITE_TYPE_NO_RESPONSE(写入无返回),参数requireResponse就表示是否需要设备返回,如果需要返回,..._servicesDiscovered) gatt.DiscoverServices(); }...PlatformGetPrimaryServices方法用来找到BLE设备的所有主服务(通过GattServiceType.Primary来判断是否为主服务),返回一个GattService列表,GattService

2K20

Android 低功耗蓝牙开发(扫描、连接、数据交互)Kotlin版

扫描设备 ① 绑定视图 ② 检查Android版本 ③ 打开蓝牙 ④ 请求权限 ⑤ 扫描结果 ⑥ 设备适配器编写 ⑦ 数据渲染 ⑧ 开始和停止扫描 四、连接和数据交互 ① 绑定视图 ② 初始化连接 ③ Ble...: Int, result: ScanResult) { } } 看这段代码相对于Java的区别还是很大的,不过返回的结果值是一样的,然后就是触发回的地方...connectGatt(this, false, bleCallback) } ③ Ble 这里有一个bleCallback,所以你的代码会报红,这很正常,只不过我们现在没有这个类,新建一个...BluetoothGatt, mtu: Int, status: Int) { uiCallback.state("获取到MtuSize:$mtu") //发现服务 gatt.discoverServices...首先在DataExchangeActivity中创建变量: //Ble private val bleCallback = BleCallback() 现在你的bleCallback 就不会报红了

1.7K20

Android 低功耗蓝牙开发(扫描、连接、数据交互)Kotlin版

扫描设备 ① 绑定视图 ② 检查Android版本 ③ 打开蓝牙 ④ 请求权限 ⑤ 扫描结果 ⑥ 设备适配器编写 ⑦ 数据渲染 ⑧ 开始和停止扫描 四、连接和数据交互 ① 绑定视图 ② 初始化连接 ③ Ble...: Int, result: ScanResult) { } } 看这段代码相对于Java的区别还是很大的,不过返回的结果值是一样的,然后就是触发回的地方...connectGatt(this, false, bleCallback) } ③ Ble 这里有一个bleCallback,所以你的代码会报红,这很正常,只不过我们现在没有这个类,新建一个...BluetoothGatt, mtu: Int, status: Int) { uiCallback.state("获取到MtuSize:$mtu") //发现服务 gatt.discoverServices...首先在DataExchangeActivity中创建变量: //Ble private val bleCallback = BleCallback() 现在你的bleCallback 就不会报红了

2.6K31

Android Ble蓝牙App(二)连接与发现服务

前言   在上一篇中我们进行扫描设备的处理,本文中进行连接和发现服务的数据处理,运行效果图如下所示: 正文   现在我们从MainActivity进入到ScanActivity,选中一个设备返回到...** * 设备的所有信息 */ fun deviceInfo(info: String) /** * 连接状态 * @param state true...BluetoothGattService>) { } }   这里我们首先是通过Activity Result API的StartActivityForResult()函数进行页面跳转,在返回的时候拿到...device对象,这在前一篇已经写好了,拿到device对象之后调用BleCore的connect()函数进行连接设备,在onCreate()函数中进行BleCore的赋值,然后设置Ble的回,实现BleCallback...连接写好了,下面可以写发现服务了,我们可以在连接成功的处理中进行发现服务,下面我们修改一下BleGattCallback中的onConnectionStateChange()函数中的代码,如下图所示: 通过gatt.discoverServices

54210

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

" android:required="true"/> (3) 动态控制 BLE 功能是否使用 动态控制 BLE 是否可用 : 不管怎样, 如果你想要让你的 APP 可以当做 BLE 设备, 但是手机不支持这个操作...你必须实现这个 LeScanCallback 接口, 因为 BLE 蓝牙设备扫描结果在这个接口中返回.  -- 查找策略 : 蓝牙搜索是非常耗电的, 你需要遵守以下的 中断策略 和 不循环策略. --...扫描回接口 :  -- 接口作用 : BluetoothAdapter.LeScanCallback 实现类, 在这个实现类的接口中返回 BLE 设备扫描结果; -- 源码示例 :  private...API 中定义的不同的回方法....: 一特性开启了改变通知监听, 如果特性发生了改变, 就会回 BluetoothGattCallback 接口中的 onCharacteristicChanged() 方法.

5.5K30

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

的设备提供,在manifest文件中包括: <uses-feature android:name="android.hardware.bluetooth_le" android:required="<em>true</em>...//使用getSystemService()<em>返回</em>BluetoothManager,然后将其用于获取适配器的一个实例。...如果该方法<em>返回</em>false,蓝牙被禁用。...你必须实现它的回<em>调</em>函数,那就是<em>返回</em>的扫描结果。因为扫描非常消耗电量,你应当遵守以下准则: *只要找到所需的设备,停止扫描。 *不要在循环里扫描,并且对扫描设置时间限制。...当这个特征里的数据发生变化(接收到数据了),会触发 回<em>调</em>方法的 onCharacteristicChanged 方法。我们在这个回<em>调</em>方法中读取数据。

3K00

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

当一个BLE设备(称为客户端)需要获取另一个BLE设备(称为服务器)上的数据时,可以使用Ble Read操作。客户端向服务器发送读取请求,并等待服务器返回所请求的数据。...Ble Write(带回复的写操作):当一个BLE设备(称为客户端)想要向另一个BLE设备(称为服务器)发送数据时,可以使用Ble Write操作。...,Android13以前返回的是Boolean,Android13及以上返回的是Int,这里要注意一下。...)函数获取,使用这个函数,则会触发另一个回函数,同样是在BleGattCallback中增加这个回,代码如下所示: /** * 读取描述符回 Android 13...三、收到数据   下面我们写一下接收通知的回,同样是在BleGattCallback中增加这个回,代码如下所示: /** * 收到数据回 Android 13及以上使用

87130

Android 原生 BLE 开发

如果没有这些权限, 扫描将不会返回任何结果。...如果不支持BLE,那么你应该适当地禁用部分BLE功能。如果支持BLE被禁用,你可以无需离开应用程序而要求用户启动蓝牙。使用BluetoothAdapter两步完成该设置。...如果该方法返回 false,蓝牙被禁用。下面的代码检查蓝牙是否开启,如果没有开启,将显示错误提示用户去设置开启蓝牙。...你必须实现它的回函数,那就是返回的扫描结果。因为扫描非常消耗电量,你应当遵守以下准则: 只要找到所需的设备,停止扫描。 不要在循环里扫描,并且对扫描设置时间限制。...mBluetoothGatt = device.connectGatt(this, false, mGattCallback); 连接到 GATT 服务端时,由 BLE 设备做主机,并返回一个 BluetoothGatt

3.9K20

Android蓝牙BLE低功耗相关简单总结

BLE通信协议 在进行BLE通信时通信双方分为外围(Periphery)和中央(Central) 1,外围用于提供数据 2,中央用于接收和处理数据 相当于集中式布局,中央可接收多个外围的数据,外围只能向一个中央发送数据...,也就是说一个中央同时可连接多个外围设备,一个外围设备只能连接一个中央 3,主要类 i>,BluetoothGattServer:外围设备要发送的数据 ii>,BluetoothServerCallback...:返回外围设备的状态 iii>,BluetoothGatt:中央使用和处理数据 iv>,BluetoothGattCallBack:返回中央设备的状态 使用ble通信可以包含多个Profile,一个profile...搜索到ble设备时会回onLeScan方法,获取到BluetoothDevice 利用所获取的device调用连接方法device.connectGatt(......)方法,方法返回BluetoothGatt...对象 /** *第一个参数为上下文,context *第二个参数为autoConnect,布尔值 *第三个参数为BluetoothAdapter.LeScanCallback对象,连接后回,在回中可以获取到手机的蓝牙连接状态

97310

浏览器的 5 种 Observer,你用过几种?

IntersectionObserver 可以监听一个元素和可视区域相交部分的比例,然后在可视比例达到某个阈值的时候触发回。...document.querySelector('#box2')); 创建一个 IntersectionObserver 对象,监听 box1 和 box2 两个元素,当可见比例达到 0.5 和 1 的时候触发回...元素可以用 ResizeObserver 监听大小的改变,当 width、height 被修改时会触发回。...PerformanceObserver 用于监听记录 performance 数据的行为,一旦记录了就会触发回,这样我们就可以在回里把这些数据上报。...当这些记录行为发生的时候,希望能触发回,在里面可以上报。 我们在浏览器跑一下试试: 可以看到 mark 的时间点记录、资源加载的耗时、点击按钮的 measure 时间段记录都监听到了。

88741

Android中文API —— VideoView

声明   欢迎转载,请保留文章原始出处:)      博客园:http://www.cnblogs.com/     Android中文翻译组: http://goo.gl/6vJQl...VideoView 类可以从不同的来源(例如资源文件或内容提供器) 读取图像,计算和维护视频的画面尺寸以使其适用于任何布局管理器, 并提供一些诸如缩放、着色之类的显示选项。...如果允许下一个事件接受器处理该事件,可以返回假 public boolean onTouchEvent (MotionEvent ev) 实现该方法来处理屏事件。...参数 event        屏事件 返回值 如果事件已经处理返回True,否则返回false。...如果未指定回函数, 或回函数返回假,VideoView 会通知用户发生了错误。

1.3K30

蓝牙项目开发流程

使用带回应写模式,这种模式会降低部分转 发效率,但可保证单个数据包的正确性,而使用 CBCharacteristicWriteWithoutResponse参数,使用不带回应写模式,这种模式会有利于提高转发效率,数据包的正确性需要...java 如何能在一个方法中返回多个值?..._百度知道 java 一个函数如何返回多个值 - beiyeren - 博客园 java如何使用函数返回多个函数值?...是接口的bug,我的解决方案是当出现129的时候我通过代码将蓝牙重启来避免这个问题 android 蓝牙4.0 BLE 为什么回onServicesDiscovered方法返回的status参数一直是...UUIDList.wCharacteristicUUID, XcommandHandle.sendData("0x55", glucoseId.toString())) 发射器会把特定编号的数据发回

3.4K100

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

,和判断是否有相关的蓝牙权限写了一个函数调用 蓝牙权限 检测是否有相关权限 调用蓝牙API时先检测是否有对应的权限 像扫描设备,连接设备时需要知道返回的结果,用到了回,那类中直接就是传入相磁的...CallBack回函数,在UI界面写回函数即可。...//官网建议获取mBluetoothLeAdvertiser时,先做mBluetoothAdapter.isMultipleAdvertisementSupported判断, // 部分华为手机支持...Ble广播却还是返回false,所以最后以mBluetoothLeAdvertiser是否不为空且蓝牙打开为准 fun startAdvertising(phonename: String, mAdvertiseCallback....setIncludeDeviceName(true) //设置广播包中是否包含发射功率 .setIncludeTxPowerLevel(true)

45830
领券