android BluetoothDevice.getName() gibt null zurück
Irgendwann auf, BluetoothDevice.getName() null zurück. Wie kann ich es beheben?
remoteDeviceName vielleicht null in folgenden code. Und ich muss unterscheiden, mein Gerät und andere Geräte, die von remoteDeviceName.
BluetoothAdapter.getDefaultAdapter().startLeScan(new LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, final int rssi,
byte[] scanRecord) {
String remoteDeviceName = device.getName();
Log.d("Scanning", "scan device " + remoteDeviceName);
});
InformationsquelleAutor der Frage maonanyue | 2014-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schließlich fand ich die Lösung:
1.Für das Gerät ist angeschlossen:
Gerät Lesen Namen von gatt-Charakteristik org.bluetooth.charakteristisch sind.Lücke.device_name der service org.bluetooth.service.generic_access.
2.Für Gerät nicht angeschlossen:
InformationsquelleAutor der Antwort maonanyue
BluetoothDevice.getName()
zurückgeben kannnull
wenn der name nicht ermittelt werden konnte. Dies könnte durch eine beliebige Anzahl von Faktoren. Egal, der name ist der freundlich Namen des Geräts, und sollte nicht verwendet werden, unterscheiden es von anderen Geräten. Verwenden Sie stattdessen die hardware-Adresse durchgetAddress()
.InformationsquelleAutor der Antwort 323go
Ich habe versucht, Anzeige Namen meiner RN4020 Bluetooth-Modul und vor dem gleichen Problem. Habe das problem gefunden in der Microchip-forum:
Hatte ich den device-Namen bis 9 Zeichen. Festlegen der name-zu 4 bytes, die das Problem beseitigt haben.
Wenn Sie erkennen die UUID ' s der benutzerdefinierten services, damit Sie wissen, Ihr Gerät können Sie auch eine Verbindung zu dem Gerät und Lesen Sie dessen Namen (wenn Ihr mehr als 6 bytes in meinem Fall). Dies wurde auch vorgeschlagen, in Mikrochips forum.
http://www.microchip.com/forums/m846328.aspx
InformationsquelleAutor der Antwort etrusks
Habe ich gefunden, dass, wenn Sie die Abfrage für den Namen des Geräts, unmittelbar nachdem es abgeholt Scannen Sie kann null zurückgeben. Um dies zu umgehen habe ich eine Umfrage runnable jede Sekunde oder so auf dem UI-thread maximal 3 mal (Also 3 Sekunden), und der name ist in der Regel gelöst, indem dann.
Beachten Sie, dass im snippet zur Verfügung gestellt, der umschließenden Klasse implementiert
Runnable
also warum kann ich passthis
inView.postDelayed(Runnable action, long delayMillis)
InformationsquelleAutor der Antwort Tunji_D
Auf Marshmallow, nutzen
ScanRecord.getDeviceName()
zum abrufen der lokalen Namen, eingebettet in den scan aufnehmen.BluetoothDevice.getName()
ist unzuverlässig, wenn der lokale name ist enthalten in einer scan-Antwort, sondern in der unmittelbaren Werbung Paket.InformationsquelleAutor der Antwort Kevin
Ich weiß, das ist alt, aber das mehr spec-orientierte Antwort könnte helfen, Antworten auf einige Fälle.
In Bluetooth Low Energy, Werbung und scan-Antwort-Daten ist nur erforderlich, um die Bluetooth-Adresse. Anzeige der Daten ist, wie ein client BTLE Endpunkt entdeckt ein service-Gerät. Ein client kann verlangen, einen scan-Antwort und weitere Daten. Der name des Gerätes ist optional in diese Daten. Jedoch, die BTLE Spezifikation erfordert, dass alle Bluetooth Low Energy-Endgeräte unterstützen die Generic Access service, der erforderlich ist, um das Gerät zu unterstützen Name Merkmal. Leider, zu Lesen, dass auf das Merkmal der Android müssen zuerst eine Verbindung herstellen und tun service discovery. Wenn die Anzeige/scan-Antwort nicht die Informationen, ich glaube nicht, dass Android mit dem Gerät in Verbindung zu dem Namen. Zumindest habe ich noch nie gesehen, Anzeige zu verbinden, ohne die app, die speziell eine Verbindung anfordert. Dies ist nicht das, was Sie wollen gefordert werden kann, wenn Sie wollen, um eine Entscheidung zu verbinden.
Glücklicherweise sind die meisten BTLE Geräte die ich gearbeitet habe, tun mit Ihrem Namen in der Anzeige-oder scan-Antwort.
Andere Möglichkeit ist, dass das Gerät möglicherweise der name in der scan-Antwort-Teil der Anzeige. Je nachdem, wie man eingerichtet hat, die Android-BTLE scanner, könnte man nur die Anzeige von Daten und nicht der scan-Antwort. In diesem Fall wird der name nicht gefunden werden, wenn das Gerät bringt es auf den scan-Antwort. Die Standard-scanner-Einstellungen, jedoch sind solche, die eine scan-Antwort empfangen werden muss, bevor die scan-Daten übergeben, bis die app.
InformationsquelleAutor der Antwort Brian Reinhold