如何使用 GattServer 以编程方式清除蓝牙缓存

2024-01-12

我对 BLE 有点熟悉,并且我面临着继承代码的一些问题。所以该应用程序的工作方式如下:

  1. 启用 BLE 后,应用程序会扫描设备
  2. 该应用程序显示找到的设备
  3. 用户选择要配对的设备
  4. 该应用程序与设备配对

我面临的问题是,配对几次(情况有所不同)后,手机无法发现设备,从而阻止用户配对。

我正在使用 Gatt 服务器与客户端设备连接,并且我正在重置服务,如下所示:

public void resetBluetoothGattServer() {
    Log.i(TAG," resetBluetoothGattServer: bluetoothGattServer: "+ bluetoothGattServer);
    if (bluetoothGattServer != null) {
        if(!bluetoothGattServer.getServices().isEmpty()){
            Log.i(TAG," resetBluetoothGattServer: clearing services on bluetooth Gatt Server");
            bluetoothGattServer.clearServices();
        }
        Log.i(TAG," resetBluetoothGattServer: closing bluetoothGattServer");
        bluetoothGattServer.close();
    }
    bluetoothGattServer = openGattServer();
}

重新启动手机、关闭蓝牙然后重新打开以及卸载并安装应用程序都无法解决问题。唯一的解决方案是从 Android 应用程序管理器上的蓝牙共享应用程序清除缓存。

这个帖子如何在不使用缓存的情况下以编程方式强制 Android 上的蓝牙低功耗服务发现 https://stackoverflow.com/questions/22596951/how-to-programmatically-force-bluetooth-low-energy-service-discovery-on-android解决了类似的问题,但由于我们没有使用 BluetoothGatt 进行连接,因此它不是一个合适的解决方案。两者都不会重构整个继承的代码。

我问您是否有一种方法可以使用BluetoothGattServer 以编程方式清除缓存。


一种解决方案 - 使用反射解决此问题。

private void refreshDeviceCache(BluetoothGatt gatt) {
        try {
            Method localMethod = gatt.getClass().getMethod("refresh");
            if(localMethod != null) {
                localMethod.invoke(gatt);
            }
        } catch(Exception localException) {
            Log.d("Exception", localException.toString());
        }
    }

注意:我不推荐这种方式

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

如何使用 GattServer 以编程方式清除蓝牙缓存 的相关文章

随机推荐

  • Bootstrap网格列清除

    我很难理解 Bootstrap 中的列 ClearFix 结构 我正在尝试创建一个卡片布局 它需要布局中的行都具有相同的高度 但每个条目中的内容不一定相同 您可以在这里查看我正在做的事情的示例 https demo eap soa com
  • Windows Phone 7 麦克风可以检测 18k-19kHz 范围内的频率吗?

    Windows Phone 7 内置麦克风可以检测到高于 18kHz 的频率吗 从技术上讲是的 API 支持以足够的质量记录 PCM 以表达 18kHz 正弦波 标准 POTS 线路甚至 T1 线路通常以 8 kHz 16 位运行 这在数学
  • 我可以在 emacs lisp 宏中添加条件吗?

    如何实现这样的目标 defmacro mood x if equal symbol name x t defun happy message Happy defun sad message Sad 我的目标是根据参数创建不同的函数 这样做有
  • debugger-ruby_core_source gem 没有提供 ruby​​-1.9.2-p321 的源代码

    我最近更新到小牛队 添加了 xcode 的命令行工具 尝试了 捆绑更新调试器 以及我发现的所有其他修复 包括此 rake add source 以包含此处找到的适当标头 http sponsorpay github io blog 2012
  • React-router 和 Next.js 有什么不同

    我目前正在研究 ReactJS 我看见NextJS https nextjs org and 反应路由器 https reacttraining com react router web guides quick start 谁能告诉我两者
  • openid url 列表 [重复]

    这个问题在这里已经有答案了 可能的重复 在哪里可以找到 OpenID 提供商 URL 列表 https stackoverflow com questions 1116743 where can i find a list of openi
  • 将一个元素推送到php中多维数组中的每个数组?

    这是我的数组 myArr array array one two array one two 我想向其中的每个数组添加一个元素 myArr 我不想循环遍历内部的每个数组并添加该元素 有没有更快的方法来实现这一点数组映射 or 数组行走 最好
  • Android 4.x 是否支持通过 TCP 传输 RTSP 流?

    我已经在 Android 中使用 VideoView 在 wowza 上成功播放视频 现在我要处理我的服务器 UDP 端口似乎被阻止 以openRTSP命令证明 gt openRTSP rtsp 61 218 52 250 554 live
  • 使用位图和 Volley 查看寻呼机内存泄漏

    我正在使用 View Pager 在我的应用程序中显示从网络下载的图像 图像的数量可以是 5 到 20 我正在使用 Volley 库来进行网络操作 该应用程序之前并没有占用太多内存 但现在添加视图寻呼机后 该应用程序占用了大量内存 每次我打
  • Facebook - 您没有访问此个人资料所需的权限

    我正在尝试构建一项服务 让用户根据我们的电子邮件数据库创建带有自定义受众的 Facebook 广告 在创建 Facebook 广告之前 我想创建广告预览 当我使用自己的帐户 Facebook 应用程序的管理员 登录时 这工作得很好 但作为测
  • 更有效地从 Jar 中提取文件

    我正在扩展一个实用程序类 该类捆绑了一组图像和 xml 描述文件 目前 我将所有文件保存在一个目录中并从那里加载它们 该目录如下所示 8 png 8 xml 9 png 9 xml 10 png 10 xml 50 png 50 xml 这
  • 使用 mongo 同时拉取和添加设置

    我有一个集合 其中的元素可以简化为 tags 1 5 8 其中数组中至少有一个元素 并且所有元素都应该不同 我想用一个标签替换另一个标签 我认为不会有问题 所以我提出了以下查询 db colll update tags 1 pull tag
  • 使用 @font-face 会减慢加载时间。我可以强制客户端缓存字体吗?

    Update 看起来标头请求信息是罪魁祸首 如何更改请求标头的 max age 属性 TIA 您好 我在网站上使用 font face 并且遇到文本加载延迟的情况 可能是由于每页加载字体所致 我知道客户端必须下载一次字体才能正常显示 但是每
  • Chrome 分析器中的“未优化”警告是什么意思?

    当我使用 Chrome 中的开发人员工具收集 JavaScript CPU 配置文件时 我收到两个关于函数的神秘警告 未优化 优化次数过多 未优化 内联退出 这些实际上意味着什么 以及有哪些可能的解决方案 我见过的另一个是未优化 TryCa
  • 如何将 CallingMemberName 传递给自定义日志记录提供程序

    使用 ASP NET Core 并使用 ILogging 和 ILoggingProvider 实现我自己的控制台日志记录提供程序 因为我想将调用函数的名称作为日志记录以及日期 时间戳的一部分传递给记录器 检索调用函数名称的最佳方法是在函数
  • 同一java web应用程序的url重定向/映射到多个子域

    我有一个域名 例如 www domain com 我开发了一个java web应用程序 比如jwa 现在我想使用子域为不同的客户端安装相同的应用程序 最好的解决方案是什么 像 client1 domain com 之类的东西指向 clien
  • 支持 Phonegap 最小平台版本

    我的公司正在进行一个大项目 我必须开发 IOS Android symbian Windows Phone 和黑莓 在听说和研究 Phonegap 后 我真的正在考虑使用它 但是我想知道是否有以及哪些是针对这些平台使用 Phonegap 进
  • CanCan 和不带模型的控制器

    我正在使用 CanCan 进行授权 我在 app config ability rb 中定义了模型操作用户规则 并且工作正常 我已经添加了这一行load and authorize resource到我的 application contr
  • 如何在 Spark Streaming EC2 集群应用程序中从 S3 读取输入

    我试图让我的 Spark Streaming 应用程序从 S3 目录读取他的输入 但在使用 Spark submit 脚本启动它后我不断收到此异常 Exception in thread main java lang IllegalArgu
  • 如何使用 GattServer 以编程方式清除蓝牙缓存

    我对 BLE 有点熟悉 并且我面临着继承代码的一些问题 所以该应用程序的工作方式如下 启用 BLE 后 应用程序会扫描设备 该应用程序显示找到的设备 用户选择要配对的设备 该应用程序与设备配对 我面临的问题是 配对几次 情况有所不同 后 手