Programmatisch verbinden mit gekoppelten Bluetooth-Lautsprecher und audio Abspielen

In unserer app, ich möchte eine Verbindung zu einem zuvor gekoppelten A2DP-Bluetooth-Lautsprecher und direkte audio-Wiedergabe, um es, mit Android v4.2 oder später.

Kann ich erfolgreich ein A2DP-Profil-Objekt mit diesem code, um den Prozess zu starten:


/* Manifest permissions */
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

//Get the default adapter
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

//Establish connection to the proxy.
mBluetoothAdapter.getProfileProxy(this, mProfileListener, BluetoothProfile.A2DP)

Und die folgenden listener, um zu reagieren, um die Verbindung:

private BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() {
public void onServiceConnected(int profile, BluetoothProfile proxy) {

    if (profile == BluetoothProfile.A2DP) {

        mBluetoothSpeaker = (BluetoothA2dp) proxy;

        //no devices are connected         
        List<BluetoothDevice> connectedDevices = mBluetoothSpeaker.getConnectedDevices();

        //the one paired (and disconnected) speaker is returned here
        int[] statesToCheck = {BluetoothA2dp.STATE_DISCONNECTED};           
        List<BluetoothDevice> disconnectedDevices = mBluetoothSpeaker.getDevicesMatchingConnectionStates(statesToCheck);



        BluetoothDevice btSpeaker = disconnectedDevices.get(0); 

        //WHAT NOW?

    }
}
public void onServiceDisconnected(int profile) {
    if (profile == BluetoothProfile.A2DP) {
        mBluetoothSpeaker = null;
    }
}
};

Ich bin nur ein wenig verloren, was jetzt zu tun, verbinden Sie das Gerät, und leiten die audio-Ausgang zu. Ich habe versucht mit dem Gerät verbindet, wie detailliert in der Android-docs, mit dem folgenden code, aber der Letzte BluetoothSpeaker.getConnectedDevices() Aufruf gibt keine angeschlossenen Geräte.

    BluetoothSocket tmp = null;
    UUID MY_UUID = UUID.fromString("00001108-0000-1000-8000-00805f9b34fb");
    try {           
        tmp = btSpeaker.createInsecureRfcommSocketToServiceRecord(MY_UUID);

    } catch (IOException e1) {
        //TODO Auto-generated catch block
        Log.d("createRfcommSocketToServiceRecord ERROR", e1.getMessage());
    }
    mmSocket = tmp;

    try {
        //Connect the device through the socket. This will block
        //until it succeeds or throws an exception
        mmSocket.connect();
    } catch (IOException connectException) {
        //Unable to connect; close the socket and get out
        try {
            Log.d("connectException", connectException.getMessage());
            mmSocket.close();
        } catch (IOException closeException) { }
        return;
    }

    connectedDevices = mBluetoothSpeaker.getConnectedDevices();

Den code scheint es mit dem Gerät verbinden, in gewisser Weise, obwohl, wie wenn ich die Ausführung beendet ist, wird der Bluetooth-Lautsprecher annouces, dass es bereit ist, zu koppeln (wie es das immer tut, wenn es getrennt von einer audio-Quelle).

Ältere Versionen des BluetoothA2dp zu haben scheinen, eine connect(BluetoothDevice device) Methode, aber das wurde nun entfernt (ab 4.2) und ich bin kämpfen, um zu finden, eine klare Beispiele dazu, wie Sie programmgesteuert eine Verbindung zu einem A2DP-Gerät und der direkten audio-Ausgang zu. Jede Hilfe, wie zu nähern, entweder würde sein dankbar erhalten.

Irgendwelche Tipps, wie man diesen Ansatz wäre enorm geschätzt.

  • Ich bin angenommen, Sie erstellen Ihre mProfileListener - Instanz VOR dem Aufruf getProfileProxy(...)?
  • Ja, die onServiceConnected block feuert glücklich.
  • Die Antwort auf diese Frage stackoverflow.com/questions/12542523/... und die Kommentare auf es scheint nicht vielversprechend.
  • Danke, Squonk, ich kann das Gerät zu verbinden (oder zumindest ein Feuer BluetoothDevice.ACTION_ACL_CONNECTED Ereignis), indem Sie createInsecureRfcommSocketToServiceRecord(), aber wenn das post Recht, dann RFcomm ist falsch, A2DP Rundfunk sowieso. Was ist der richtige Weg, um eine Verbindung zu einem Gerät für A2DP? Es scheint ein riesiges Loch in den Android-Bluetooth-Dokumentation (oder zumindest mein Verständnis davon).
  • Um ehrlich zu sein, ich weiß nicht, wie ich es noch nie versucht mit A2DP, aber ich Stimme es gibt eine Lücke in der Dokumentation. Es scheint seltsam, es gibt Optionen für A2DP, aber keine nützliche Methoden für die Verwendung (oder wenigstens keine nützliche Dokumentation welche erklären, wie es zu benutzen). Wenn ich auf etwas gestossen, ich werde wieder zu Ihnen.
  • Danke, Squonk, sehr geschätzt. Es ist gut, ein bisschen Bestätigung, dass ich nicht gerade ganz blöd. Wenn Sie vor Ort etwas zu diesem Zusammenhang in der nahen Zukunft (und erinnere mich noch an diesem Beitrag!) Ich würde gerne hören, über Sie. Ich denke, für jetzt ist unsere Arbeit um zu knallen öffnen Sie die OS Bluetooth-Steuerung aus unserer app.
  • Hey. Hast du eine Lösung? Weil ich habe das gleiche problem wie du. Ich kann nicht streamen Sie Musik über die Lautsprecher.
  • Hallo Silvia, sorry, aber da dieses posting eine Frage, die ich gearbeitet habe, auf andere Aspekte des Projekts, und für jetzt haben Sie, um eine Verbindung zu Bluetooth-Lautsprecher manuell in Android. Haben Sie versucht, den code, der zxshi unten geschrieben? Es wäre toll zu wissen, ob es tatsächlich funktioniert oder nicht!
  • Ja ich habe es versucht, aber es funktioniert nicht für mich. Es ist wirklich merkwürdig, ich habe einen code, der funktioniert wirklich sehr gut auf 4.0.3 und 4.1, aber nicht auf 4.2 nicht mehr. Ich lese das jetzt mehrere Male, dass dies nicht funktioniert auf 4.2 nicht mehr, aber ich habe noch keine Lösung gefunden dafür.

InformationsquelleAutor Ted | 2014-03-06
Schreibe einen Kommentar