当前位置: 首页 > 知识库问答 >
问题:

Android 4.3蓝牙低能耗不稳定

麹高远
2023-03-14

每当设备断开连接时,我确保对BluetoothGatt对象调用close()并将其设置为null。有什么见解吗?

编辑:
日志转储:对于这些日志,我将我的电话根目录化,并提高了/etc/bluetooth/bt_stack.conf中相关项的跟踪级别

成功连接-重新启动手机并安装应用程序后的第一次尝试。我能够连接,发现所有的服务/特性,并读/写。

共有1个答案

韦阳辉
2023-03-14

(也许由于Android操作系统的更新,这些提示中的一些已经不再必要了。)

  1. 有些设备,如带有Android4.3的Nexus4,使用现有的gatt实例连接需要45秒以上的时间。解决方法:在断开连接时总是关闭gatt实例,并在每个连接上创建一个新的gatt实例。
  2. 不要忘记调用android.bluetooth.bluetoothgatt#close()
  3. onlescan(..)中启动一个新线程,然后连接。原因:BluetoothDevice#ConnectGatt(Context Context,boolean autoConnect,BluetoothGattCallback callback)总是失败,如果在LesCancallback(){...}.OnlesCan(BluetoothDeviceDevice,int rssi,Byte[]scanRecord)的同一线程中调用(至少用于构建JSS15J.I9300XXUGMK6)
  4. 大多数设备筛选播发
  5. 最好不要使用Android.bluetooth.bluetoothadapter#startlescan(uuid[]serviceUuids,LeScanCallback callback)参数来筛选某些服务UUID,因为这在带有Android 4.3的三星Galaxy S3中完全中断,一般情况下对128位UUID不起作用。
  6. GATT始终可以一次处理一个命令。如果几个命令相继被短调用,第一个命令将被取消,这是由于gatt实现的同步特性。
  7. 我经常看到,即使是在搭载Android5的现代设备上,Wifi也会干扰蓝牙,反之亦然。最后,关闭wifi以稳定蓝牙。

对于新用户来说,这个视频教程是一个很好的切入点:为Android开发Bluetooth Smart Applications http://youtu.be/x1y4tehdwk0

周围工作:我可以“稳定”我的应用程序这样做...

  1. 我为用户提供一个设置“重新启动蓝牙”。如果启用了该设置,我将在某些点重新启动蓝牙,这表明BLE堆栈开始变得不稳定。例如。如果startScan返回false。如果serviceDiscovery失败,也可能是一个很好的观点。我只是关闭和打开蓝牙。
  2. 我提供了另一个设置“关闭WiFi”。如果启用了该设置,我的应用程序会在运行时关闭Wifi(然后重新打开)

这项工作是基于过去的经验...

    null
 类似资料:
  • 最近,我买了一台iBeacon设备,打算创建Android应用程序,以便识别和使用它。我是一个在Android应用程序中使用蓝牙的新手,有很多事情我还不知道。在互联网和本论坛中,我找到了使用Radius Networks的Android IBeacon库的建议,但是,唉,现在它不再可用了: https://github.com/RadiusNetworks/android-ibeacon-serv

  • jd.readBLECharacteristicValue(Object object) 读取低功耗蓝牙设备的特征值的二进制数据值。注意:必须设备的特征值支持 read 才可以成功调用。 参数名 类型 默认值 必填 说明 deviceId string 是 蓝牙设备 id serviceId string 是 蓝牙特征值对应服务的 uuid characteristicId string 是 蓝牙

  • 我得到一些信息,Android设备现在可以在蓝牙低能耗(BLE)外围模式下运行。应用程序可以使用此功能从Android L中的New向附近的设备广播它们的存在。 我已经全部配置好了(即蓝牙LE广告和广告数据的设置要在广告包中进行广告),当我开始发送时,我发现我无法监听传入的连接。谁能帮我? 我是一个基于l-开发者-预览-参考的API(Added Package:android.bluetooth.

  • 我目前正在开发一个应用程序,将使用蓝牙低能耗。 我正在使用以下链接, http://developer.android.com/samples/BluetoothLeGatt/src/com.example.android.bluetoothlegatt/DeviceScanActivity.html 我无法扫描周围的BLE设备。 要扫描设备,

  • 我目前正在编写一个应用程序,使用在2个或更多的手机之间传递小字符串的数据。 当前在前台,我正在传递:和。当应用程序位于前台时,我能够恢复(通过NSLog)通过CBAdvertisementDataLocalNameKey传递的字符串。 但是,当应用程序位于后台时,不会被传递。仍然与整数、和一起传递。 在梳理了一个似乎永无止境的叫做苹果文档的圈子后,我发现没有办法在应用程序处于后台时传递一个小字符串

  • 是否可以自动连接到蓝牙低能耗(BLE)设备? Android文档表明[](https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context,boolean,android.bluetooth.BluetoothGattCallback)