die Unterschiede zwischen createRfcommSocketToServiceRecord und createRfcommSocket
Was sind die Unterschiede zwischen diesen beiden Möglichkeiten unter anschließen an ein bluetooth-Gerät:
1)
UUID uuid = UUID.fromString(Values.SPP_UUID); //Standard SerialPortService ID
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
2)
Method m = mmDevice.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
mmSocket = (BluetoothSocket) m.invoke(mmDevice, 1);
Finde ich die erste Möglichkeit nicht funktioniert, die ganze Zeit, manchmal wird es funktionieren, aber nachdem ich in der Nähe der bluetooth-Gerät, es wird nicht wieder funktionieren. Der zweite Weg ist immer gut funktionieren. Ich weiß, es ist öffnen Sie einfach die Kanal-Kommunikation mit bluetooth, aber ich weiß nicht, wie Sie es tun können, die Verbindung zu einem bluetooth-Gerät ohne Verwendung von uuid?
- Jemand weiß etwas über diese Frage? Ich brauche wirklich Sie Jungs helfen.
- Vom Scannen über die Dokumentation wie es aussieht, createRfCommSocket gibt Ihnen viel mehr Kontrolle und Felder zu basteln
Du musst angemeldet sein, um einen Kommentar abzugeben.
Denke, dass es ein bisschen wie der Unterschied zwischen dem öffnen einer TCP-Verbindung zu einem port, die Sie durch Anzahl, und die öffnung ein, um einen port ein, den Sie nachschlagen von Namen aus
/etc/services
.createRfcommSocketToServiceRecord
nimmt die UUID übergeben Sie und SDP verwendet, um zu entscheiden, was radio-Kanal für die Verbindung verwenden. Es wird auch überprüft, um sicherzustellen, dass ein server lauscht auf dem remote-Endpunkt, mit der gleichen UUID. Auf diese Weise, es ist der zuverlässigste Weg, um eine Verbindung zu erhalten: es wird immer den richtigen Kanal, und öffnen, wenn die Verbindung erfolgreich ist, wissen Sie was am anderen Ende verstehen kann, Ihr Protokoll.Im Gegensatz dazu
createRfcommSocket
nur verbindet, um den Kanal, den Sie erzählen. Es gibt keine Möglichkeit zu wissen, ob überhaupt etwas hört auf dem remote-Endpunkt: Sie wissen nur, das Gerät ist da. Auch die Auswahl der radio-Kanal komplett unangebracht. Das ist, warum diese Funktion wird nicht veröffentlicht und die API, und die andere Funktion wird bevorzugt.createRfcommSocket
zunächst erscheinen mögen zuverlässiger sein, aber es ist, weil es nicht die Prüfung auf das Vorhandensein der Zuhörer, an der der andere Endpunkt: es ist das ignorieren einige Fehlerfälle. Dies könnte in Ordnung sein für das Experimentieren, aber es ist keine Verwendung für die Produktion system, weil oft der Benutzer wird vergessen den server starten, auf den anderen Endpunkt, und Ihre app wird nicht in verwirrenden Möglichkeiten.Natürlich, wie
createRfcommSocket
nicht veröffentlicht in der API, Sie habe keine Garantie, es wird auch weiterhin alle am arbeiten in zukünftigen Versionen von Android.