2011-12-04 38 views
11

Sé que es posible obtener el nombre del dispositivo local, como se describe en la solución a esta pregunta Display Android Bluetooth Device NameCambiar el nombre del dispositivo Bluetooth Android

lo que estoy interesado en saber es, ¿puedo cambiar el nombre Buetooth local (el otros dispositivos se ven cuando estoy en modo de descubrimiento) programaticlly. Sé que puedes cambiarlo a mano, pero estoy escribiendo y aplicación y quiero poder cambiar el nombre (agregar una bandera simple) para que otros dispositivos con la misma aplicación puedan escanear y saber al instante si el teléfono también se está ejecutando. la aplicación.

tl; dr: ¿Cómo puedo cambiar el nombre del dispositivo bluetooth en android?

Respuesta

20

Sí se puede cambiar el nombre del dispositivo usando setName (String name) de BluetoothAdapter type.Following es el código de ejemplo:

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

gracias gracioso! @¡Disidente! – gumuruh

+0

Esto parece funcionar, pero también parece haber algunos problemas de almacenamiento en caché (es decir, los dispositivos conectados siempre tenían un nombre antiguo). Si alguien se encuentra con este problema, entre en la configuración de Bluetooth del teléfono y vea los dispositivos, esto pareció borrar el caché para mí –

1

Gracias por la respuesta original, aquí hay algunas cosas que encontré cuando implementar eso podría ayudar a alguien más a salir.

1) BT debe estar habilitado para que setName() funcione.

2) BT tarda tiempo en habilitarse. es decir. no se puede simplemente llamar a enable() y setName()

3) Lleva tiempo que el nombre "se hunda". es decir. no puede llamar a getName() justo después de setName() y esperar el nuevo nombre.

Por lo tanto, aquí hay un fragmento de código que se me ocurrió para usar un ejecutable para hacer el trabajo en segundo plano. También tiene un límite de tiempo de 10 segundos, por lo que no se ejecutará para siempre si hay un problema.

Finalmente, esto es parte de nuestra verificación de encendido, y normalmente dejamos BT deshabilitado (debido a la batería). Entonces, apago BT luego, puede que no quieras hacer eso.

// 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); 
    } 
} 
Cuestiones relacionadas