簡體   English   中英

如何以編程方式清除Android中的藍牙名稱緩存?

[英]How to programmatically clear the Bluetooth name cache in Android?

我注意到,當配對的藍牙設備更改名稱時,我的Android設備並不總是注冊該名稱更改。 它繼續顯示設備的舊名稱......這對於不成對的設備來說不是問題,所以我的猜測是Android會在某處緩存配對設備的名稱。

環顧四周后,我發現如果我取消配對設備並手動清除存儲在Android的“藍牙共享”應用程序中的緩存,則此問題就會消失。 當然,在我再次將設備與Android配對后,問題可能會再次出現。

TL; DR如何強制Android始終顯示藍牙設備的最新名稱?

我聽說過“fetchUuidsWithSdp”方法,但我不知道如何使用它。

是的,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交換)。

要記住我連接的最后一個設備,我總是將MAC地址保存在文件中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM