Bluetooth A2DP(Advanced Audio Distribution Profile
) ist das Bluetooth-Stereo-Profil, das definiert, wie qualitativ hochwertiges Stereo-Audio von einem Gerät zu einem anderen über eine Bluetooth-Verbindung gestreamt werden kann – zum Beispiel Musik von einem Mobiltelefon zu drahtlosen Kopfhörern.
In älteren Android-Versionen waren die Klassen, die für die Verbindung mit einem Bluetooth-A2DP-Gerät benötigt werden, in der API-Ebene versteckt, in den späteren Versionen ab Android 4.0 sind sie teilweise sichtbar gemacht.
Aber es gibt eine Lösung, die auf allen Android-Versionen funktioniert, man kann einfach mit jedem A2DP-Gerät interagieren, indem man einige IPC-Aufrufe (Inter Process Communication) macht.
Grundsätzlich wird dies durch die Verwendung von AIDL (Android Interface Definition Language) erreicht, die es im Grunde ermöglicht, die Programmierschnittstelle zu definieren, auf die sich sowohl der Client als auch der Dienst einigen, um über IPC miteinander zu kommunizieren.
Wie kann man ein Bluetooth-Gerät mit einem beliebigen Android-Gerät verbinden?
Um die Verbindung zu einem Bluetooth-Gerät mit einem beliebigen Android-Gerät programmatisch zu ermöglichen, müssen Sie nur diese einfachen Schritte befolgen.
Schritt 1: Erstellen von AIDL-Dateien
Unser erster Schritt besteht darin, die Instanz der Bluetooth A2DP-Klasse zu erhalten. Dazu müssen Sie zunächst 2 AIDL-Dateien in Ihrem „src“-Ordner des Android-Projekts unter Paket android.bluetooth
wie folgt erstellen:
Schritt 2: Berechtigungen hinzufügen
Dann fügen Sie im Android Manifest die Berechtigungen für die Verwendung von Bluetooth und den folgenden Diensten hinzu:
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BROADCAST_STICKY
android.permission.BIND_ACCESSIBILITY_SERVICE
Schritt 3: Bluetooth aktivieren und gekoppelte Geräte abrufen
Zuerst müssen Sie sicherstellen, dass Bluetooth aktiviert ist. Um die Aktivierung von Bluetooth anzufordern, rufen Sie startActivityForResult()
mit der Aktion ACTION_REQUEST_ENABLE
Intent auf. Dadurch wird eine Anforderung zur Aktivierung von Bluetooth über die Systemeinstellungen ausgegeben.
val enableBtIntent = Intent(BluetoothAdapter. ACTION_REQUEST_ENABLE)
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
Sie können die bereits gekoppelten Geräte von der BluetoothAdapter-Klasse wie folgt abrufen:
devices = BluetoothAdapter.getDefaultAdapter().bondedDevices
Aus den Geräten können Sie Ihr Headset-Gerät abrufen, das Sie koppeln möchten
Schritt 4: Herstellen einer Bluetooth-Verbindung
Verwenden Sie getProfileProxy()
, um eine Verbindung mit dem Profil-Proxy-Objekt herzustellen, das mit dem Profil verbunden ist. Richten Sie einen BluetoothProfile.ServiceListener(),
Dieser Listener benachrichtigt BluetoothProfile
IPC-Clients, wenn sie mit dem Dienst verbunden oder von ihm getrennt wurden.
Schritt 5: Audio-URL streamen
Der nächste Schritt ist das Streamen von Audio, das Sie auf dem angeschlossenen Bluetooth-Headset abspielen möchten. Initialisieren Sie den MediaPlayer und geben Sie die Streaming-URL wie folgt wieder:
Schritt 6: Trennen Sie das Gerät
Wenn Sie mit der Audiowiedergabe fertig sind und die Proxy-Verbindung zum Gerät trennen möchten, verwenden Sie die folgende Methode, um den MediaPlayer zu trennen und freizugeben: