android ble 某些手机连接不上,又不知道什么原因,填坑吧

news/2024/10/20 1:20:39/

2)更好的办法是,当手机端onServiceDiscovered触发后,并且service,Characteristic都初始化好后,发送指令给蓝牙硬件设备(即writeCharacteristic)表示手机端已经准备好,可以发送数据给我了,蓝牙硬件设备收到后再发送数据,这样能很好的保证数据不丢失。

  1. 最好的办法是1)和 2)的结合,即发送准备好的指令,然后让智能硬件发送数据,然后在接收数据的过程中,使用ACK机制确保数据没有任何丢失。

4… Read/Write Characteristic/Descriptor 等都是异步的,即立即返回,等待回调。因此如果Android手机底层自身如果没有做请求的同步顺序执行的话,那么当有很多请求几乎同时进行时,回调顺序是无法保证的。此时就造成错误,这也会导致很多蓝牙4.0不能兼容某些Android的原因,因此需要自己提供一套同步机制,如RequestQueue,来保证request&response 一个接一个高效有序的进行,即下一个request必须等到上一个request的response返回之后再执行。

5… Read/Write Characteristic/Descrip

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

tor/RemoteRssi(),一般在不同的线程中回调。(除了onDescriptorWrite返回的线程与写入线程为同一个线程???)

BluetoothDevice.conncectGatt(),

BluetoothGatt.connect(),

BluetoothGatt.disconnect(),

BluetoothGatt.discoverServices()

最好都在主线程,否则会遇到很多意想不到的麻烦。

6… BLE的特征一次读写最大长度20字节。

7… Android手机会对连接过的BLE设备的Services进行缓存,若设备升级后Services等有改动,则程序会出现通讯失败。此时就得刷新缓存,反射调用BluetoothGatt类总的refresh()方法。

8… startLeScan(UUID[], LeScanCallback)在Android 4.4及以下手机中似乎只支持16位的短UUID,不支持128位。

9… connectGatt() 在某些三星手机上只能在UI线程调用。

10… Android L 新API扫描设备换为 startScan(List, ScanSettings, ScanCallback)。

11… Android M 必须拥有定位权限才能扫描BLE设备。

12… 一个主设备(例如Android手机)可以同时连接多个从设备(一般为6个,例如智能硬件。超过就连接不上了),一个从设备只能被一个主设备连接,一旦从设备连接上主设备,就停止广播,断开连接则继续广播。在任何时刻都只能最多一个设备在尝试建立连接。如果同时对多个蓝牙设备发起建立Gatt连接请求。如果前面的设备连接失败了,则后面的设备请求会被永远阻塞住,不会有任何连接回调。所以建议:如果要对多个设备发起连接请求,最好是一个接一个的顺序同步请求管理。

13… 任何出错,超时,用完就马上调用Gatt.disconnect(), Gatt.close()。

14… 从bindService 到 onServiceConnected 这个回调花费时间较长, onServiceConnected 这个回调很可能在 MainActivity onResume之后才执行, 所以不要指望onResume里去执行扫描,因为此时serviceConnected 回调都尚未执行

15… getBtAdapter().enable()是异步,立即返回,但从 off 到 on 的过程需要一个时间所以只能监听系统broadcast发出的intent里的state

16… onCharacteristicWrite … 等等是指本机写数据指令已经成功发送出去,并且智能硬件已经处理完回应回来了,另外,当智能硬件端要求发送的指令有顺序的话,那么这边不能发送速度过快,即不能在onCharacteristicWrite里立即发送下一条指令。例如OAD/OTA等等,字节必须严格按照image的字节顺序发送出去。

17… 在writeCharacteristic时,若速度过快(例如在OAD时),会发现发送出去的数据有可能不是你自己真正发出去的,在onCharacteristicWrite里打印出可以确定。

18… App端的关于同一个UUID的2个指令不能同时发出去,这样会导致硬件端无法辨识,所以需要串行发送,即等其中一个发送回调成功之后,再进行下一个。

19… 多次扫描蓝牙,在华为荣耀,魅族M3 NOTE 中有的机型,会发现多次断开–扫描–断开–扫描… 会扫描不到设备,此时需要在断开连接后,不能立即扫描,而是要先停止扫描后,过2秒再扫描才能扫描到设备。

20… 扫描尽量不要放在主线程进行,可以放入子线程里。不然有些机型会出现 do too many work in main thread.
(function () {(function () { (‘pre.prettyprint code’).each(function () { var lines = (this).text().split(′\n′).length;var (this).text().split(’\n’).length; var numbering = $(’

  • ').addClass(‘pre-numbering’).hide(); (this).addClass(′has−numbering′).parent().append( (this).addClass(‘has-numbering’).parent().append(numbering); for (i = 1; i

http://www.ppmy.cn/news/416160.html

相关文章

安卓手机wifi面对面快传的实现

上图 先说说大致的布局框架吧! 主页面使用tablayoutviewpager实现, 因为TabLayout和ViewPager分别是属于design和v4包下的,所以我们先在app的build.gradle中添加: compile com.android.support:design:23.1.1 然后具体的布局就…

【武沛齐Django】图书管理系统的刻意练习(第12个网站)--20230406

武沛齐课程笔记链接https://poker.blog.csdn.net/article/details/128073474 图书管理系统地址 github地址https://github.com/Seasonzhang-0503/library 实现书籍的借订和归还。 Form类 Form类:表单的增删改查 models.py以theBook为例子 THEBOOK_TYPE ((电子…

腾讯确认QQ大规模盗号,iPhone14无缘Type-C,第四大运营商5G正式放号,今日更多大新闻在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大家好,今天是6月27日星期一。 全北京等了一天的暴雨,没来。你的城市下雨了吗? 新的一周,来看看今天有哪些值得关注的科技新闻。 今日大新闻 腾讯回应大规模用户反馈QQ账号被盗 昨天夜里…

公众号开发(二)--菜单管理

公众号开发(二)--菜单管理 开发说明 以下是官网的说明 1、自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。 2、一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。 3、创建自…

一键跳转添加QQ好友 点击链接直接跳转到QQ好友页面如何实现

网页可以唤起QQ群,这我们都知道可以做到,那如何唤起呢?下面就做一个简单的介绍,希望可以帮助到有需要的朋友 1、官方提供的几种加群的链接: 官方的加群代码的获取前提是我们具有权限(也就是群主或管理权限&#xff09…

学成在线--认证授权模块

完整版请移步至我的个人博客查看:https://cyborg2077.github.io/ 学成在线–项目环境搭建 学成在线–内容管理模块 学成在线–媒资管理模块 学成在线–课程发布模块 学成在线–认证授权模块 学成在线–选课学习模块 学成在线–项目优化 Git仓库:…

C#图书馆租赁管理系统

本系统是为书籍管理而设计的高效管理系统,系统功能强大,同时操作界面简洁,内容比较简单,而管理人员大多受到过系统的培训,并能够操作电脑,所以只要花很少的时间,就能够让他们熟悉本系统。 系统开发的总体任务是实现各种图书信息的系统化、规范化和自动化。系统功能分析…

迈乐a100+Linux,迈乐A100双核、M3固件V4.04YYF定制版

官方更新: 优化输出分辨率设成1080P时,通过迈乐电视助手推送到手机上显示不全问题; 优化在线升级,减少升级出错几率; 版本:4.04 适用机型:迈乐A100双核、M3 ----------------------------------…