Sorry, noch Baustelle
Permissions im Manifest
In der Manifest-Datei muss die Erlaubnis eingetragen werden, dass Bluetooth verwendet wird.<uses-permission android:name="android.permission.BLUETOOTH"> </uses-permission>Damit Geräte gefunden und gepaart werden dürfen, muss folgende Erlaubnis eingetragen werden:
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"> </uses-permission>Für die Ermittlung der Adressen verbundener Geräte muss folgende Permisson vorliegen:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"> </uses-permission>
Zugriff auf den Adapter
Um über Bluetooth kommunizieren zu können, benötigt man erst einmal das Bluetooth-Device des eigenen Geräts, so es einen hat.private BluetoothAdapter defBTAdapter; @Override protected void onCreate(Bundle savedInstanceState) { // ... defBTAdapter = BluetoothAdapter.getDefaultAdapter();Gibt es keinen Bluetooth-Adapter, ist der Rückgabewert null. Es kann aber auch sein, dass er nicht eingeschaltet ist. Das prüft man durch die Methode isEnabled. Letzteres kann man ändern, indem man die System-Activity ACTION_REQUEST_ENABLED aufruft.
if (defBTAdapter != null && !defBTAdapter.isEnabled()) { Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); activityResultLauncher.launch(intent); }Der Start der Activity läuft im Hintergrund. Das Ergebnis wird in einem Callback erfahren.
In vielen Beispielen wird startActivityForResult verwendet. Diese Methode
ist allerdings als deprecated gekennzeichnet und soll nicht mehr verwendet
werden.
Statt startActivityForResult wird nun ein ActivityResultLauncher eingesetzt.
private ActivityResultLauncheractivityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback () { @Override public void onActivityResult(ActivityResult result) { TextView tv = (TextView) findViewById(R.id.tv); if (result.getResultCode() == MainActivity.RESULT_OK) { tv.setText("Alles gut"); } else { tv.setText("Nicht gut"); } } });
BluetoothDevice
Die Kommunikation geht über den eigenen BluetoothAdapter zu einem BluetoothDevice.Die aktuell gekoppelten BluetoothDevices erhält man durch den Aufruf von getBondedDevices. Der folgende Programmausschnitt zeigt alle gekoppelten Geräte.
SetbtDevices = defBTAdapter.getBondedDevices(); String str = ""; for (BluetoothDevice dev : btDevices) { str += "\n" + dev.getName(); } TextView tv = (TextView) findViewById(R.id.tv); tv.setText(str);
Übersicht
Ablauf
Server macht sich sichtbar und wartet auf Anfragen.Der Client sucht ein Gerät, nimmt die Verbindung auf.
Der Server akzeptiert die Verbindung.
Der Client sendet seine Anfrage
Der Server sendet seine Antwort.
Der Client nimmt die Ergebnisse seiner Antwort entgegen.
Übersicht über die Klassen
- BluetoothAdapter: Zugriff auf den Bluetooth Adapter
Android Development: BluetoothAdapter- Sichtbar machen
- Liefert paired devices: getBondedDevices
- erzeugt BluetoothDevice
- erzeugt BluetoothServerSocket
- startDiscovery
- listenUsingInsecureRfcommWithServiceRecord
- BluetoothDevice
- getName liefert den Namen des Geräts
- getAddress liefert die Adresse des Geräts
- BluetoothSocket
- BluetoothServerSocket