[英]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.