如何在安卓系统中通过编程清除蓝牙名称缓存?

7
我注意到当配对的蓝牙设备更改名称时,我的Android设备并不总是注册该名称更改。它继续显示设备的旧名称......这对于未配对的设备不是问题,因此我自然猜测Android在某个地方缓存了配对设备的名称。
经过寻找,我发现如果我取消配对设备并手动清除存储在Android的“蓝牙共享”应用程序中的缓存,则此问题会消失。当然,我再次将设备配对到我的Android后,问题可能会再次出现。
简而言之,如何强制Android始终显示蓝牙设备的最新名称?
我听说过“fetchUuidsWithSdp”方法,但我不确定如何使用它。
2个回答

7

是的,使用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”(bluetooth中的e和u被交换)。


这个方法解除了我的蓝牙阻塞,使我能够发送数据。之前的蓝牙设备没有响应。应用此代码后,我删除了配对,然后重新启动了它。 我有一个蓝牙打印机适配器(中文)和一个爱普生LX 300+II点阵打印机。我列出发票。 非常感谢! - mihai71
尽管这段代码在大多数设备上都能正常运行,但我有一个设备(安卓7.1.1的摩托罗拉Moto E⁴ Plus),它会导致com.android.bluetooth崩溃: - Stephan Richter
请问我应该在哪里使用startFetch()方法? - naima

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接