如何防止名称缓存并在发现时检测蓝牙名称更改

2023-12-13

我正在编写一个 Android 应用程序,它从蓝牙设备接收信息。我们的客户建议蓝牙设备(他们生产的)将根据某些条件更改其名称 - 举个最简单的例子,其名称有时是“xxx-ON”,有时是“xxx-OFF”。我的应用程序只是应该寻找这个 BT 发射器(我使用 BluetoothAdapter.startDiscovery() )并根据它找到的名称执行不同的操作。我没有与蓝牙设备配对(尽管我认为这可能是可能的,但该应用程序最终应该与多个 Android 设备和多个 BT 发射器配合使用,所以我不确定这是否是一个好主意)。

我的代码可以很好地检测 BT 设备并找到它们的名称。另外,如果设备关闭,我可以在下次搜索时检测到它不在那里。但似乎如果它在那里并且它改变了名称,我会选择旧名称 - 大概它被缓存在某个地方。即使蓝牙设备关闭,并且我们注意到,下次检测到它时,我仍然会看到旧名称。

我在谷歌代码中发现了这个问题:here但我什至不清楚如何使用给出的解决方法(“尝试连接”)。有人这样做过并且运气好吗?你能分享代码吗?

有没有一种简单的方法可以删除缓存的名称并再次搜索,以便我始终找到最新的名称?即使是一种不简单的方法也会很好(我正在为 root 设备编写)。

Thanks


我建议使用“fetchUuidsWithSdp()”。其意义在于,与类似的 getUuids() 方法不同,fetchUuidsWithSdp 会导致设备更新有关远程设备的缓存信息。我相信这包括远程名称和 SPD。

请注意,我提到的两种方法在 4.0.3 之前都是隐藏的,因此您的代码将如下所示:

public static void startServiceDiscovery( BluetoothDevice device ) {
    // Need to use reflection prior to API 15
    Class cl = null;
    try {
        cl = Class.forName("android.bluetooth.BluetoothDevice");
    } catch( ClassNotFoundException exc ) {
        Log.e(CTAG, "android.bluetooth.BluetoothDevice not found." );
    }
    if (null != cl) {
        Class[] param = {};
        Method method = null;
        try {
            method = cl.getMethod("fetchUuidsWithSdp", param);
        } catch( NoSuchMethodException exc ) {
            Log.e(CTAG, "fetchUuidsWithSdp not found." );
        }
        if (null != method) {
            Object[] args = {};
            try {
                method.invoke(device, args);
            } catch (Exception exc) {
                Log.e(CTAG, "Failed to invoke fetchUuidsWithSdp method." );
            }               
        }
    }
}

然后,您需要侦听BluetoothDevice.ACTION_NAME_CHANGED意图,并从中提取BluetoothDevice.EXTRA_NAME。

让我知道这是否有帮助。

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

如何防止名称缓存并在发现时检测蓝牙名称更改 的相关文章

随机推荐

  • 在手机间隙运行 https 请求

    我正在iPhone中开发phone gap应用程序 我想使用JQuery getJSON url function 访问https json 请求 但仅在应用程序中它不会返回任何内容 但在正常的移动Safari中它工作正常 尽管它在phon
  • 如何使用 watchOS 2 SDK 构建应用程序

    在上次提交申请时 我们收到了此警告 WatchKit 支持无效 从 2018 年 4 月 1 日开始 提交到 Apple Watch App Store 的所有应用程序都必须使用 watchOS 2 SDK 或更高版本构建 检查您的部署目标
  • 仅沿第三维在 3D 逻辑数组中使用 Matlab“查找”

    我有一个 3D 逻辑数组 例如 A randi 0 1 x y z 其中 x y z 是整数 有没有办法找到每个 x y 沿第三维 z 的第一个真值 我可以像这样循环执行 B zeros x y for ix 1 x for iy 1 y
  • 如何将自定义ListAdapter设置为appwidget中的列表视图?

    我有一个列表视图 我需要为每个列表项提供一个自定义视图 因此我创建了一个自定义 ListAdapter 它提供了视图和布局 如下所示 但是如何使用 RemoteViews 将这个 listAdapter 设置为小部件中的 ListView
  • 程序集编号转 ascii

    我正在使用 intel 上的 at t 语法来处理汇编程序 我迷路了 如何将寄存器中的整数转换为 ASCII 数字 假设我想转换数字 10 我会将数字 10 放入寄存器 eax 中 如果我只是将数字 48 添加到 eax ascii 符号将
  • ZipArchive::close():读取错误:是一个目录

    我试图找出这个问题 但我无法想象为什么它一直发生 我正在将文件添加到 ZipArchive 当我尝试关闭它时 它收到目标是目录的错误 但我很确定事实并非如此 这是 zip 函数的代码 function create zip folder d
  • 打算打开Goog​​le身份验证器

    有没有办法通过 Intent 打开 Google Authenticator 如果是 是否可以使用已填充的密钥来打开它 以使其对用户实用 我有一个更通用的代码 因此 您只需将包名称作为参数发送给方法openApp Context conte
  • Meteor.js 应用程序模板中的多重收益

    我在布局文件中有一个用于iron router的通用 gt yield 它渲染我的页面 这些页面是模板 在我的一个页面中 我有一个侧面菜单 根据此菜单中的选择 我想在此页面中加载与此页面相关的不同模板 我怎样才能实现这个目标 我用iron
  • 使用 Matplotlib 绘制字典中的日期和关联值

    我有一本包含 Python 实例的字典datetime date和相关的数值 整数 类似这样的东西 但当然要大得多 datetime date 2016 5 31 27 datetime date 2016 9 1 87 我正在尝试使用 M
  • Jackson 动态更改 JsonIgnore

    我有一个类 里面也有变量 有时我想忽略某些字段 有时在反序列化时不想忽略 也许也在序列化时 我怎样才能在杰克逊做到这一点 对于序列化 过滤属性 博客文章应该有所帮助 反序列化方面的支持较少 因为更常见的是想要过滤掉写入的内容 一种可能的方法
  • 列表视图的自定义滚动条

    I have a task to create a custom scrollbar for list view and to my knowledge the way you can customize your scrollbar is
  • 解决 MySQL“无法重新打开表”错误

    我目前正忙于实现一个过滤器 我需要为每个要过滤的 标签 生成一个 INNER JOIN 子句 问题是 在执行完一大堆 SQL 之后 我有一个表 其中包含进行选择所需的所有信息 但对于每个生成的 INNER JOIN 我再次需要它 这基本上看
  • 如何为气泡设置边界并根据命令触发移动?

    我在 D3 中有一个气泡图 我用它来显示每组有多少个气泡 这个版本一开始有大约 500 个气泡 我的完整版本有大约 3 000 个 我在二维中挣扎 我试图让气泡在不在状态之间转换时保持原状 并且我还试图让气泡创建矩形形状 这是一个demo的
  • 表单完成后 PHP 重定向

  • 如何检查 Linux shell 上是否设置了“s”权限位?还是珀尔?

    我正在编写一些脚本来检查是否为特定文件设置了 s 权限位 例如 我的文件的权限如下 drwxr s 如果设置了该位 如何检查 bash 脚本或 perl 脚本 如果你使用 perl 那么看看perldoc u File has setuid
  • Python:类方法内的变量

    我正在学习 python 并尝试编写一个基于角色热区的伤口系统 这是我写的 别对我评价太多 class Character def init self agility strength coordination self max agili
  • 类型错误:无法读取未定义的属性“根”

    我正在尝试将 Material Ui 中的 BasicTable 函数放入我的 React js 文件中 这是我的代码 import React Component from react import Route Redirect Swit
  • axios支持Set-Cookie吗?是否可以通过axios HTTP请求进行身份验证?

    我正在尝试使用 Axios HTTP 请求调用来验证 Express API 后端 我能够在响应标头中看到 Set Cookie 但未设置 cookie 是否可以通过axios HTTP调用设置cookie Access Control A
  • 为什么打字稿会在数字上抛出错误 |未定义的比较,即使在使用可选链接之后也是如此?

    下面是我的代码块 如果说 Object 可能未定义 打字稿将在第二个代码块上抛出错误 在这种情况下 打字稿不应该假设它为 falsea is undefined并且不抛出错误 const condition true can be a co
  • 如何防止名称缓存并在发现时检测蓝牙名称更改

    我正在编写一个 Android 应用程序 它从蓝牙设备接收信息 我们的客户建议蓝牙设备 他们生产的 将根据某些条件更改其名称 举个最简单的例子 其名称有时是 xxx ON 有时是 xxx OFF 我的应用程序只是应该寻找这个 BT 发射器