2012-05-29 8 views
6

Mir ist aufgefallen, dass mein Android-Gerät bei einer Namensänderung eines gekoppelten Bluetooth-Geräts diese Namensänderung nicht immer registriert. Es wird weiterhin der alte Name des Geräts angezeigt ... Dies ist kein Problem für ungepaarte Geräte, so dass ich vermute, dass Android die Namen gekoppelter Geräte irgendwo zwischenspeichert.Wie programmiere ich den Bluetooth-Namen-Cache in Android?

Nachdem ich mich umgesehen habe, habe ich festgestellt, dass dieses Problem verschwindet, wenn ich das Gerät entpaare und den Cache manuell lösche, der in der "Bluetooth Share" -App meines Androids gespeichert ist. Natürlich wird das Problem wahrscheinlich wieder auftreten, nachdem ich das Gerät wieder an mein Android gekoppelt habe.

TL; DR Wie erzwinge ich, dass Android immer den neuesten Namen eines Bluetooth-Geräts anzeigt?

Ich habe etwas über die Methode "fetchUuidsWithSdp" gehört, aber ich bin mir nicht sicher, wie ich es benutzen soll.

Antwort

6

Ja, fetchUuidsWithSdp() ist eine gute Idee, da es im Gegensatz zu getUuids() das Gerät zwingt, eine Verbindung zum Zielgerät herzustellen und seine Informationen darüber zu aktualisieren.

Offizielle Unterstützung für fetchUuidsWithSdp wurde gerade in 4.0.3 hinzugefügt, aber es war zuvor mit Reflexion verfügbar.

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."); 
      }    
     } 
    } 
} 

Normalerweise würde man dann für android.bluetooth.device.action.UUID registrieren, aber Sie könnten für die Namensänderung Aktion statt registrieren möchten.

Beachten Sie, dass wenn Sie sich für die UUID-Aktion registrieren möchten, diese vor API 15 als "android.bleutooth.device.action.UUID" falsch geschrieben wurde (das e und u in Bluetooth werden vertauscht).

+0

VIELEN DANK – user1408996

+0

diese Methode deblockiert mein Bluetooth, so konnte ich Daten senden. zuvor hat das BT-Gerät nicht reagiert. Nachdem dieser Code angewendet wurde, löschte ich die Partnerschaft und initiierte sie anschließend neu. Ich habe einen Bluetooth-Druckeradapter (chinesisch) und einen Epson LX 300 + II Dot-Drucker. Ich liste Rechnungen auf. so VIELEN DANK !!! – mihai71

0

das letzte Gerät erinnern, dass ich verbinde ich immer in einer Datei die MAC-Adresse speichern