plusone

Posts mit dem Label Serial Port Profile werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Serial Port Profile werden angezeigt. Alle Posts anzeigen

5. Mai 2011

Serial Port Profil per Bluetooth (#Update)

Hallo,

da bin ich wieder auf meinem Osterurlaub.
Heute zeige ich euch, wie ihr euer Serial Port Profile (SPP) programmtechnisch bei einer Bluetooth(BT)-Verbindung aktiviert und mit einem Gerät verbindet.

Als erstes braucht ihr denn BluetoothAdaper des Geräts, diesen bekommt ihr durch die statische Methode des BluetoothAdaper :
  • BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
Desweiteren braucht ihr die UUID die eure Verbindung als SPP kennzeichnet.
  • UUID sppUUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
Anschließen benutzt ihr die Methode listenUsingRfcommWithServiceRecord(String, UUID) um eine ein ServerSocket zu öffnen und auf Verbindungen warten.
Ab hier ist es nur noch ServerSocket-Verarbeitung. Im Vorfeld solltet ihr natürlich überprüfen, ob euer Gerät überhaupt BT hat und dieses auch aktiviert ist. Gerät sichtbar machen, darf auch nicht fehlen. Im Code sieht es anschließen so aus:
//UUID für den SPP
UUID sppUUID = UUID
.fromString("00001101-0000-1000-8000-00805f9b34fb");
BluetoothServerSocket serverSocket;
//BT-Adapter
BluetoothAdapter bluetoothAdapter = BluetoothAdapter .getDefaultAdapter();

if (bluetoothAdapter == null) {
// Device does not support Bluetooth
}

//Anschalten des BTs nachfragen, falls dieses deaktiviert ist
if (!bluetoothAdapter .isEnabled()) {
Intent enableBtIntent = new Intent( BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivity(enableBtIntent);
}

//Sichbarkeit des BT für 300 Sekunden nachfragen
Intent discoverableIntent = new Intent( BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra( BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); startActivity(discoverableIntent);

//ServerSocket erstellen
try {
serverSocket = bluetoothAdapter
.listenUsingRfcommWithServiceRecord( "Dein Name der Verbindung", sppUUID);
//Auf Verbindungsaufbau des SPP-Geräts waren
BluetoothSocket bluetoothSocket = serverSocket.accept();
//und anschließen verarbeiten
handleBluetoothSocket(bluetoothSocket);
} catch (IOException e) {
Log.e("meine APP", "BT - SPP", e);
}

Damit habe ich geschaft eine BT-Verbindung mit SPP zu einem Bezahlterminal zu erstellen.
Ich hoffe es hilft euch bei euren Problemen weiter.

regards

- - - - - - - - - - - - -
#Update - Permissions

Hallo noch mal,
wie ihr bestimmt schon gemerkt habt, müsst ihr auch die Permission für BT erlangen/nachfragen.
Das wird in der AndroidManifest.xml getan. Diese Datei findet ihr in eurem Projektordner(../AndroidManifest.xml).
Im manifest-Tag müsst ihr nun noch diese Zeile hinzufügen:

< uses-permission android:name="android.permission.BLUETOOTH" />
Solltet ihr selbst die Sichtbarkeit euren Gerät aktivieren,
bluetoothAdapter.startDiscovery()
so benötigt ihr auch:
< uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

Alles nachzulesen im android.bluethooth package.

regards