2011-12-04 84 views
11

我知道這是可能因爲在溶液中描述了這個問題Display Android Bluetooth Device Name更改了Android的藍牙設備名稱

什麼,我想知道是讓本地設備的名字,我可以改變局部buetooth名(一個其他設備可以看到我處於發現模式時)程序化。我知道你可以手動更改它,但我正在編寫和應用程序,我希望能夠更改名稱(添加一個簡單的標誌),以便具有相同應用程序的其他設備可以掃描並即時知道手機是否也在運行應用程序。

tl; dr:如何更改Android上的藍牙設備名稱?

回答

20

是的,你可以更改使用的setName(字符串名稱)BluetoothAdapter type.Following的是示例代碼的設備名稱:

private BluetoothAdapter bluetoothAdapter = null; 
    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

    void ChangeDeviceName(){ 
        Log.i(LOG, "localdevicename : "+bluetoothAdapter.getName()+" localdeviceAddress : "+bluetoothAdapter.getAddress()); 
        bluetoothAdapter.setName("NewDeviceName"); 
        Log.i(LOG, "localdevicename : "+bluetoothAdapter.getName()+" localdeviceAddress : "+bluetoothAdapter.getAddress()); 
       } 
+0

謝謝恩! @Maverick! – gumuruh

+0

這似乎有效,但似乎也有一些緩存問題(即連接的設備始終有舊名稱)。如果有人遇到這個問題,進入手機藍牙設置並查看設備,這似乎爲我清除緩存 –

1

感謝原來的答案,這裏有我的時候發現的幾件事情實施這可能會幫助別人。

1)BT必須啓用setName()才能工作。

2)BT啓用需要時間。即。你不能只是調用enable()然後setName()

3)名稱需要時間「沉入」。即。你不能在setName()之後立即調用getName()並期待新的名字。

所以,這裏是我想出的一段代碼,它使用runnable在後臺完成工作。它也有時間限制到10秒,所以如果出現問題它不會永遠運行。

最後,這是我們檢查電源的一部分,我們通常會禁用BT(由於電池)。所以,我把BT關閉後,你可能不想這樣做。

// BT Rename 
// 
final String sNewName = "Syntactics"; 
final BluetoothAdapter myBTAdapter = BluetoothAdapter.getDefaultAdapter(); 
final long lTimeToGiveUp_ms = System.currentTimeMillis() + 10000; 
if (myBTAdapter != null) 
{ 
    String sOldName = myBTAdapter.getName(); 
    if (sOldName.equalsIgnoreCase(sNewName) == false) 
    { 
     final Handler myTimerHandler = new Handler(); 
     myBTAdapter.enable(); 
     myTimerHandler.postDelayed(
       new Runnable() 
       { 
        @Override 
        public void run() 
        { 
         if (myBTAdapter.isEnabled()) 
         { 
          myBTAdapter.setName(sNewName); 
          if (sNewName.equalsIgnoreCase(myBTAdapter.getName())) 
          { 
           Log.i(TAG_MODULE, "Updated BT Name to " + myBTAdapter.getName()); 
           myBTAdapter.disable(); 
          } 
         } 
         if ((sNewName.equalsIgnoreCase(myBTAdapter.getName()) == false) && (System.currentTimeMillis() < lTimeToGiveUp_ms)) 
         { 
          myTimerHandler.postDelayed(this, 500); 
          if (myBTAdapter.isEnabled()) 
           Log.i(TAG_MODULE, "Update BT Name: waiting on BT Enable"); 
          else 
           Log.i(TAG_MODULE, "Update BT Name: waiting for Name (" + sNewName + ") to set in"); 
         } 
        } 
       } , 500); 
    } 
}