2012-05-29 51 views
6

我注意到,當配對的藍牙設備有名稱更改時,我的Android設備並不總是註冊該名稱更改。它繼續顯示設備的舊名稱......這對於未配對的設備來說不是問題,所以我自然推測Android會在某處緩存配對設備的名稱。如何以編程方式清除Android中的藍牙名稱緩存?

環顧四周後,我發現如果我取消配對設備並手動清除存儲在我的Android「藍牙共享」應用程序中的緩存,則此問題消失。當然,這個問題可能會在我將設備再次連接到我的Android之後回來。

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

我聽說過有關「fetchUuidsWithSdp」方法,但我不知道如何使用它。

回答

6

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

+0

THANK YOU SO MUCH – user1408996

+0

這種方法解封我的藍牙,我就可以發送數據。此前BT設備不會迴應。在此代碼應用後,我刪除了合作關係,然後重新啓動了它。 我有一個藍牙打印機適配器(中文)和一臺Epson LX 300 + II點陣打印機。我列出發票。 非常感謝! – mihai71

0

要記住,我連接我一直保存MAC地址在文件的最後一個設備

相關問題