【问题标题】:How to programmatically clear the Bluetooth name cache in Android?如何以编程方式清除 Android 中的蓝牙名称缓存?
【发布时间】:2012-06-03 08:36:29
【问题描述】:

我注意到,当配对的蓝牙设备发生名称更改时,我的 Android 设备并不总是注册该名称更改。它继续显示设备的旧名称......这对于未配对的设备来说不是问题,所以我自然猜测Android会在某处缓存配对设备的名称。

环顾四周后,我发现如果我取消配对设备并手动清除存储在我的 Android 的“蓝牙共享”应用程序中的缓存,这个问题就会消失。当然,在我再次将设备与我的 Android 配对后,问题可能会再次出现。

TL;DR 如何强制 Android 始终显示蓝牙设备的最新名称?

听说过“fetchUuidsWithSdp”方法,但不知道怎么用。

【问题讨论】:

    标签: android android-intent bluetooth discovery


    【解决方案1】:

    是的,fetchUuidsWithSdp() 是个好主意,因为与 getUuids() 不同,它会强制设备尝试连接到目标设备并更新其相关信息。

    fetchUuidsWithSdp 的官方支持刚刚在 4.0.3 中添加,但在此之前使用反射就可以使用。

    public static void startFetch( 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." );
                }               
            }
        }
    }
    

    然后通常会注册 android.bluetooth.device.action.UUID,但您可能想要注册名称更改操作。

    请注意,如果您决定注册 UUID 操作,在 API 15 之前它会被错误拼写为“android.bleutooth.device.action.UUID”(蓝牙中的 e 和 u 已交换)。

    【讨论】:

    • 这个方法解除了我的蓝牙阻塞,这样我就可以发送数据了。以前 BT 设备不会响应。应用此代码后,我删除了合作伙伴关系,然后重新启动它。我有一个蓝牙打印机适配器(中文)和一个 Epson LX 300+II 点式打印机。我列出发票。非常感谢!!!
    • 虽然此代码适用于大多数设备,但我有一个(Motorola Moto E⁴ Plus with Android 7.1.1)会导致 com.android.bluetooth 崩溃:
    • 请问我应该在哪里使用 startFetch() 方法?
    【解决方案2】:

    为了记住我连接的最后一个设备,我总是将 MAC 地址保存在一个文件中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-04
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      相关资源
      最近更新 更多