2011-12-04 4 views
11

Je sais qu'il est possible d'obtenir le nom du périphérique local tel que décrit dans la solution à cette question Display Android Bluetooth Device NameChanger le nom du périphérique Bluetooth Android

Ce que je voudrais savoir est, puis-je changer le nom de buetooth local (un autre appareil voit quand je suis en mode découverte) programaticlly. Je sais que vous pouvez le changer à la main, mais j'écris et j'applique et je veux pouvoir changer le nom (ajouter un simple drapeau) pour que d'autres appareils avec la même application puissent numériser et savoir instantanément si le téléphone fonctionne l'application.

tl; dr: Comment puis-je changer le nom du périphérique Bluetooth sur android?

Répondre

20

Oui, vous pouvez modifier le nom de votre appareil à l'aide setName (String name) de BluetoothAdapter type.Following est l'exemple de code:

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

merci gracieux! @Maverick! – gumuruh

+0

Cela semble fonctionner, mais il semble également y avoir des problèmes de mise en cache (les périphériques connectés ont toujours un ancien nom). Si quelqu'un rencontre ce problème allez dans les paramètres bluetooth du téléphone et voir les périphériques, cela a semblé effacer le cache pour moi –

1

Merci pour la réponse originale, voici quelques choses que j'ai quand la mise en œuvre qui pourrait aider quelqu'un d'autre.

1) BT doit être activé pour que setName() fonctionne.

2) BT prend du temps à activer. c'est à dire. Vous ne pouvez pas simplement appeler enable(), puis setName()

3) Il faut du temps pour que le nom "s'enfonce". c'est à dire. vous ne pouvez pas appeler getName() juste après setName() et attendre le nouveau nom. Donc, voici un extrait de code que j'ai trouvé pour utiliser un exécutable pour faire le travail en arrière-plan. Il est également temps de 10seconds, donc il ne fonctionnera pas éternellement s'il y a un problème. Enfin, cela fait partie de notre vérification de mise sous tension, et nous laissons normalement BT désactivé (à cause de la batterie). Donc, je rallume BT après, vous ne voudrez peut-être pas faire ça.

// 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); 
    } 
} 
Questions connexes