Android 12 BLE 在断开连接时始终返回状态 0

2023-12-19

使用 Android 12 设备进行测试时,每当我的蓝牙设备断开连接时,无论我是以编程方式断开连接还是设备超出范围,我都会收到状态 0。根据我对以前 Android 版本的理解,状态 0 是通过编程方式断开连接,状态 8 是设备超出范围。

 return object : BluetoothGattCallback() {

            override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) {
                val name = gatt.device.name
                Log.i("onConnectionStateChange", name + "\t" + status + "\t" + newState)

                when (newState) {
                    BluetoothGatt.STATE_CONNECTED -> {
                        gatt.discoverServices()
                    }
                    BluetoothGatt.STATE_CONNECTING -> {

                    }
                    BluetoothGatt.STATE_DISCONNECTED -> {
                    }
                    BluetoothGatt.STATE_DISCONNECTING ->  {
                        // status 0 (Programmatically disconnected)
                        if (status == BluetoothGatt.GATT_SUCCESS) {
                            // Always going in here
                          ...
                        }
                        // Deivce went out of range
                        else if(status == 8){
                           // Never in here
                          ...
                        }
                    }

                }


            }

          override fun onServicesDiscovered(gatt: BluetoothGatt?, status: Int) {
                    super.onServicesDiscovered(gatt, status)
            }
}

有没有人遇到同样的问题,并弄清楚如何让状态正确显示,或者找到另一种方法来确定设备是否超出范围或以编程方式断开连接?


我确认你对 Android 12 的说法:在 BLE 断开连接时,传入的状态参数的值onConnectionStateChange()是 0 (即BluetoothGatt.GATT_SUCCESS)断开连接是通过编程方式完成还是因为设备超出范围或以电气方式关闭。

与之前的 Android 版本相比,这是一个缺点,之前的 Android 版本会通过状态 8(0x08 = GATT CONN TIMEOUT)当设备超出范围(或被电气关闭)时,状态 0 当连接以编程方式成功关闭时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 12 BLE 在断开连接时始终返回状态 0 的相关文章

随机推荐

  • || 到底是什么?意思是?

    return empty neededRole strcasecmp role admin 0 strcasecmp role neededRole 0 到底是什么 在这个声明中是什么意思 有人可以帮我把这个翻译成英文吗 我保证我已经用谷歌
  • 32 位应用程序未更新 64 位注册表项

    C 中提到的路径中的注册表项未更新 string path Software Microsoft Windows NT CurrentVersion Windows RegistryKey myKey Microsoft Win32 Reg
  • 绑定不适用于在 XAML 中创建的 DependencyObject

    我尝试使用自定义类在 XAML 中传递多个 CommandParameters 我创建了一个名为值命令参数继承自依赖对象并有两个依赖属性 我们称它们为Value1 and Value2对于这个例子 应该调用命令并传递该对象的按钮如下所示
  • 核心数据在后台保存对象问题

    简而言之 我想要做的是使用后台队列将从 Web 服务提取的 JSON 对象保存到 Core Data Sqlite3 数据库 保存发生在我通过 GCD 创建的序列化后台队列上 并保存到为该后台队列创建的 NSManagedObjectCon
  • Python:包中的“私有”模块

    我有一个包裹mypack带模块mod a and mod b在里面 我想要包裹本身mod a自由进口 import mypack import mypack mod a 不过 我想保留mod b专供mypack 那是因为它的存在只是为了组织
  • 如何在应用程序中使用 iPhone 铃声

    我想在我的应用程序中使用 iPhone 的铃声 这可能吗 请帮助我解决这一点 Thanks 您无法以编程方式使用或更改可用的铃声 很遗憾地说 苹果公司实在是太保守了
  • 添加 TabBarController 作为视图的子视图

    当我的应用程序启动时 我正在加载启动屏幕 然后我想加载一个TabBarController 它是ViewControllers 但是 我的 TabBarController 窗口无法缩放到屏幕尺寸 底部的 TabBar 的 3 4 可能被切
  • 用Windows Forms数据控件和DataTable实现图库式的显示?

    我有一个datatable看起来像下面这样 Room Cook Waiter BG Image 201 Joe Jim Green png 202 Jack Mary Red png 203 Jet Mark Yellow png 204
  • Google 登录 - “access_token”与“id_token”与“代码”

    在我们的网站中 我们过去在使用 Google Sign In 登录人员时使用 access token 首先 我们将用户重定向到 google 用户将 access token 带给我们 我们验证该令牌以确保该用户是实际的 Google 用
  • 无法让 ActiveMQ 重新发送我的消息

    我有一个用 Java 编写的单线程 ActiveMQ 使用者 我想做的就是从队列中接收 一条消息 尝试将其发送到网络服务 如果成功则确认 它 如果 Web 服务调用失败 我希望消息保留在队列中 并在超时后重新发送 除了重新发送部分之外 它或
  • 离开屏幕保护程序或锁定计算机后程序挂起

    我们的程序运行良好 直到有人锁定计算机或弹出屏幕保护程序 但不是 ctrl alt delete 一旦计算机解锁 屏幕保护程序关闭 应用程序就会停止绘制除标题栏之外的所有内容 并停止响应输入 它显示一个大部分为白色的窗口 无法移动或关闭 应
  • SignalR 来自客户端的多个并发调用

    我希望能够做这样的事情 IHubProxy myHubProxy var t1 Task Run gt myHubProxy Invoke
  • Python 字符串替换错误

    我有一个 python 脚本 它不断返回以下错误 类型错误 replace 至少需要 2 个参数 给定 1 个 我一生都无法弄清楚是什么原因造成的 这是我的代码的一部分 inHandler open inFile2 r outHandler
  • 如何在不关闭连接的情况下更改波特率?

    我想连接到一个连接到初始波特率300的串行端口 COM4 的设备 该设备可以使用命令将其波特率更改为9600 我的Java代码将此命令发送到设备并更改设备的波特率 但我不知道如何在不关闭连接的情况下更改程序中的波特率 当连接关闭时 设备恢复
  • log4net 日志文件名中没有进程 ID

    我试图在日志文件名中包含进程 ID 信息 以便每次重新启动应用程序时都会创建一个新的日志文件 我正在从两个项目登录到同一个文件中 这是我的配置
  • 使用 Maven 测试时 Spring Boot 应用程序不读取 application.properties 文件

    UPDATE 我现在意识到了一些事情 我的application properties文件正在正确加载 因为我通过验证 env正在加载我的数据库属性的路径 感谢戴夫 问题似乎是当我使用 Spring Boot maven 插件运行它时 它无
  • Promise.prototype.finally 的 TypeScript 类型定义

    我正在使用这个 ES6 Promise 兼容的最终实现 称为Promise prototype finally https github com matthew andrews Promise prototype finally在我想要转换
  • 即使按照给定的步骤,mod_wsgi 也会在一个版本中编译并在不同版本中运行

    在查看日志后 当我通过客户端运行 apache 服务器时 我收到错误 我了解到 mod wsgi 在编译期间使用 python 2 6 并使用 python 2 7 运行 经过在互联网上的一些研究后 我按照以下步骤操作 您必须重新编译 mo
  • 如何测试调用 AJAX 函数而不使用 jasmine 触发它的函数?

    我已经签到了如何使用 Jasmine 验证 jQuery AJAX 事件 https stackoverflow com questions 4662641 how do i verify jquery ajax events with j
  • Android 12 BLE 在断开连接时始终返回状态 0

    使用 Android 12 设备进行测试时 每当我的蓝牙设备断开连接时 无论我是以编程方式断开连接还是设备超出范围 我都会收到状态 0 根据我对以前 Android 版本的理解 状态 0 是通过编程方式断开连接 状态 8 是设备超出范围 r