Android13 BLE扫描不到设备啦

这篇具有很好参考价值的文章主要介绍了Android13 BLE扫描不到设备啦。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

客户又急吼吼的来找我们:大事不好啦!Android13扫不到蓝牙设备了!

国外新系统出的早,国内没有真机实测,开发者也挺憋屈,还要被客户说不专业,经过一番搜索研究,近期出现问题的多是三星S22Ultra,升级到Android13后,搜索不到蓝牙设备了。

Android13在BLE这块新增和改动还是挺多的,其中导致“搜索不到设备”的原因,很可能是APP过滤设备名称,但是 ScanResult 获取的名字是 null,关键就在于设备的名字是不是放在了扫描回应包,如果是,那恭喜,你们的产品遇上麻烦了!Android13以前,广播的原始数据也是62字节,但广播包跟扫描回应包是连一起的,而Android13,把扫描回应包放在了后面的31字节中,也就是广播包和扫描回应包之间有很多0,导致 ScanRecord 没有 deviceName,但是Android13又没有提供针对扫描回应包的类或者接口,那这种情况就需要写代码补救,这怎么看都不像是Android的设计方式,但现实就是这样,既然碰上了这种问题,那就还是要处理,下面是相关代码文章来源地址https://www.toymoban.com/news/detail-519858.html

class ScanResponse {
    var localName: String? = null
}

fun parseName(scanResult: ScanResult): String? {
    if (Build.VERSION.SDK_INT >= 33) {
        //Android13
        scanResult.scanRecord?.let { scanRecord ->
            if (scanRecord.deviceName != null) {
                return scanRecord.deviceName
            } else {
                //deviceName为空再去解析扫描回应包,这样兼容性好一些
                scanRecord.bytes?.let { rawBytes ->
                    //rawBytes 总长度62字节,前半部分是31字节的广播包数据,后半部分是31字节的扫描回应包数据
                    val scanResponse = parseScanResponse(rawBytes, 31)
                    return scanResponse.localName
                }
            }
        }
    }

    return scanResult.scanRecord?.deviceName
}

@TargetApi(33)
fun parseScanResponse(bytes: ByteArray, start: Int): ScanResponse {
    val scanResponse = ScanResponse()
    var pos = start
    var len = bytes[pos].toInt().and(0xff)
    var dataType: Int
    var data: ByteArray
    while (len > 0) {
        dataType = bytes[++pos].toInt().and(0xff)
        data = bytes.copyOfRange(pos, pos + len - 1)
        when (dataType) {
            ScanRecord.DATA_TYPE_LOCAL_NAME_SHORT,
            ScanRecord.DATA_TYPE_LOCAL_NAME_COMPLETE -> {
                val localName = String(data)
                println("localName: $localName")
                scanResponse.localName = localName
            }
            //如果还需要解析其他数据,添加其他 DATA_TYPE_xxx 即可
            else -> {
                println("Data Type: 0x${String.format("%02X", dataType)}, Data: $data")
            }
        }
        pos += len - 1
        len = bytes[pos].toInt().and(0xff)
    }
    return scanResponse
}

到了这里,关于Android13 BLE扫描不到设备啦的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android蓝牙BLE开发

    最近正在研究Android的蓝牙BLE开发学习,以下是自己做的个人总结 首先得说明什么是低功耗蓝牙BLE,BLE的全称为Bluetooth low energy(或称Blooth LE,BLE),从英文全称便可以知晓其是一种低功耗的蓝牙技术,是蓝牙技术联盟设计和销售的一种个人局域网技术,旨在用于医疗保健、运

    2023年04月09日
    浏览(27)
  • Android -BLE 蓝牙模块开发

    Android-Ble蓝牙开发Demo示例–扫描,连接,发送和接收数据,分包解包(附源码) - 简书 前言 万物互联的物联网时代的已经来临,ble蓝牙开发在其中扮演着举重若轻的角色。最近刚好闲一点,抽时间梳理下这块的知识点。 涉及ble蓝牙通讯的客户端(开启、扫描、连接、发送... https://

    2024年02月09日
    浏览(24)
  • Android低功耗蓝牙(BLE)开发(二)

    在上一篇文章Android低功耗蓝牙(BLE)开发(一)中我们了解了BLE的相关概念,这里我们来实际用代码演示安卓进行BLE连接和通讯的功能。本文代码基于Android5.0以上(API 21) 1.声明权限 在AndroidManifest.xml文件中添加BLE相关的权限声明。 2.判断设备是否支持BLE以及蓝牙是否打开 3.进

    2024年02月09日
    浏览(36)
  • android 实现ble蓝牙自动配对连接

    蓝牙自动配对,即搜索到其它蓝牙设备之后直接进行配对,不需要弹出配对确认框或者密钥输入框。 本文章用来连接蓝牙设备ai-thinker,如果你要连接其他蓝牙设备,注意修改相关名字以及修改设备初试pin值。 将Demo安装在Android手机上,点击按钮,可以实现与目标蓝牙设备的

    2023年04月24日
    浏览(38)
  • Android Ble蓝牙App(五)数据操作

      关于低功耗蓝牙的服务、特性、属性、描述符都已经讲清楚了,而下面就是使用这些知识进行数据的读取、写入、通知等操作。 Ble蓝牙App(一)扫描 Ble蓝牙App(二)连接与发现服务 Ble蓝牙App(三)特性和属性 Ble蓝牙App(四)UI优化和描述符 Ble蓝牙App(五)数据操作  

    2024年02月13日
    浏览(25)
  • Android Ble蓝牙App(三)特性和属性

      在上一篇中我们完成了连接和发现服务两个动作,那么再发现服务之后要做什么呢?发现服务只是让你知道设备有什么服务,可以做什么事情。 Ble蓝牙App(一)扫描 Ble蓝牙App(二)连接与发现服务 Ble蓝牙App(三)特性和属性 Ble蓝牙App(四)UI优化和描述符 Ble蓝牙App(五

    2024年02月14日
    浏览(25)
  • Android Ble蓝牙App(二)连接与发现服务

      在上一篇中我们进行扫描设备的处理,本文中进行连接和发现服务的数据处理,运行效果图如下所示: Ble蓝牙App(一)扫描 Ble蓝牙App(二)连接与发现服务 Ble蓝牙App(三)特性和属性 Ble蓝牙App(四)UI优化和描述符 Ble蓝牙App(五)数据操作   现在我们从MainActivity进

    2024年01月16日
    浏览(36)
  • 【Bose30又连不上电脑蓝牙/电脑搜索不到蓝牙设备】

     关于笔记本搜索不到蓝牙设备可以参考知乎网友: 笔记本蓝牙无法搜索到设备(玄学办法同样适用于解决Wifi问题) - 知乎 (zhihu.com) 最近Bose30又连不上电脑,网络上找各种方法,最常用的方法就是:         在使用 Win10 连接耳机时,需要先连接手机,打开 Bose Connect (手机

    2024年02月06日
    浏览(36)
  • Android Ble蓝牙App(四)UI优化和描述符

      上一篇中了解了特性和属性,同时显示设备蓝牙服务下的特性和属性,本文中就需要来使用这些特性和属性来完成一些功能。 Ble蓝牙App(一)扫描 Ble蓝牙App(二)连接与发现服务 Ble蓝牙App(三)特性和属性 Ble蓝牙App(四)UI优化和描述符 Ble蓝牙App(五)数据操作   

    2024年02月13日
    浏览(29)
  • Android连接蓝牙设备问题(android.permission.BLUETOOTH)

            近期遇到一个问题,之前发布的APP连接蓝牙都是正常的,现在有人反映连不上了。经过测试发现:android 12 和 harmonyOS 3.0.0 都会有这个问题,而之前的版本就不会有这个。         经过网上一番查找,原来是因为最近Google发布的Android 12,新引入了 BLUETOOTH_SCAN、

    2024年01月16日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包