Wie erstellen Sie programmgesteuert eine A2DP-Verbindung oder wie kann ich emulieren ein Android-Handy eine A2DP-sink?
Ich habe zwei android-Handys (Samsung Galaxy Tab und HTC Desire). Beide 2.2. Das Galaxy Tab sollte eine A2DP-sink und der Wunsch, die Quelle. Mein Ziel ist es, die route der Klang der Wunsch an die Galaxy. Ich sah nur in die API, ist es möglich, eine RFCOMM-Verbindung. Aber ich will zum herstellen einer A2DP-Verbindung. Meine Anforderungen an die Lösung ist, dass keines der Telefone sollte verwurzelt sein.
Fand ich in den Quellcode der Bluetooth UUID Klasse. Und ich habe versucht, öffnen Sie eine A2DP-Verbindung mit den UUIDs.
Dies ist der code der server-Seite:
private class AcceptThread extends Thread {
public AcceptThread() {
try {
BluetoothServerSocket mmServerSocket = btAdapter.listenUsingRfcommWithServiceRecord("Audio Sink", UUID.fromString("0000110B-0000-1000-8000-00805F9B34FB")); //UUID of Audio sink
mmServerSocket = btAdapter.listenUsingRfcommWithServiceRecord(
"AVCRP Controller", UUID.fromString("0000110E-0000-1000-8000-00805F9B34FB")); //UUID of AVCRP Controller
} catch (IOException e) {
}
}
public void run() {
//Keep listening until exception occurs or a socket is returned
while (true) {
try {
socket = mmServerSocket.accept();
} catch (IOException e) {
break;
}
//If a connection was accepted
if (socket != null) {
try {
mmServerSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
Code der client-Seite:
Method m = device.getClass().getMethod("createRfcommSocket", new Class[] { int.class });
tmp = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));
Konnte ich koppeln beide Geräte und konnte eine Verbindung erstellen. Wenn ich gehe zu den bluetooth-Einstellungen den Wunsch und drücken Sie lange auf das Galaxy Tab, ich habe die Menü-OPTIONEN. Ich kann sehen, dass der media-Profil. Dann, wenn versucht, zu überprüfen, die Verbindung box zu verbinden Sie das Gerät mit den ausgewählten Profilen bekomme ich folgenden log:
04-11 17:21:18.994: DEBUG/DTUN_HCID4(1233): dtun_client_get_remote_services()
04-11 17:21:18.994: INFO/DTUN_HCID4(1233): dtun_client_get_remote_services: Get remote services on
04-11 17:21:18.994: INFO/DTUN_CLNT(1233): Client calling DTUN_METHOD_DM_GET_REMOTE_SERVICES (id 5)
04-11 17:21:18.994: INFO/(1220): DTUN_ReceiveCtrlMsg: [DTUN] Received message [BTLIF_DTUN_METHOD_CALL] 4354
04-11 17:21:18.994: INFO/(1220): handle_method_call: handle_method_call :: received DTUN_METHOD_DM_GET_REMOTE_SERVICES (id 5), len 6
04-11 17:21:18.994: ERROR/BTLD(1220): ****************search UUID = 1108***********
04-11 17:21:18.994: WARN/BTLD(1220): ccb timer ticks: 0
04-11 17:21:19.005: INFO//system/bin/btld(1219): btapp_dm_GetRemoteServices()
04-11 17:21:19.005: INFO//system/bin/btld(1219): ##### USerial_Ioctl: BT_Wake, 0x8003 ####
04-11 17:21:19.125: WARN/BTLD(1220): process_service_search_attr_rsp
04-11 17:21:19.144: WARN/BTLD(1220): ccb timer ticks: 0
04-11 17:21:19.155: ERROR/BTLD(1220): ****************search UUID = 111e***********
04-11 17:21:19.155: WARN/BTLD(1220): ccb timer ticks: 0
04-11 17:21:19.287: WARN/BTLD(1220): process_service_search_attr_rsp
04-11 17:21:19.287: WARN/BTLD(1220): ccb timer ticks: 0
04-11 17:21:19.336: ERROR/BTLD(1220): ****************search UUID = 110b***********
04-11 17:21:19.336: WARN/BTLD(1220): ccb timer ticks: 0
04-11 17:21:19.474: WARN/BTLD(1220): process_service_search_attr_rsp
04-11 17:21:19.474: WARN/BTLD(1220): ccb timer ticks: 0
04-11 17:21:19.534: INFO/BTL-IFS(1220): send_ctrl_msg: [BTL_IFS CTRL] send BTLIF_DTUN_SIGNAL_EVT (CTRL) 14 pbytes (hdl 15)
04-11 17:21:19.534: INFO/DTUN_HCID4(1233): dtun_dm_sig_rmt_services: success=1, service=00040040
04-11 17:21:19.534: DEBUG/DTUN_HCID4(1233): Adding UUID 0000111E-0000-1000-8000-00805F9B34FB
04-11 17:21:19.534: DEBUG/DEVICE(1233): Just add the profiles for /org/bluez/1233/hci0/dev_xx_xx_xx_xx_xx_xx
04-11 17:21:19.534: INFO/DTUN_HCID4(1233): Adding uuid 0000111E-0000-1000-8000-00805F9B34FB
04-11 17:21:19.534: DEBUG/DTUN_HCID4(1233): Adding UUID 0000110B-0000-1000-8000-00805F9B34FB
04-11 17:21:19.534: DEBUG/DEVICE(1233): Just add the profiles for /org/bluez/1233/hci0/dev_xx_xx_xx_x_xx_xx
04-11 17:21:19.534: INFO/DTUN_HCID4(1233): Adding uuid 0000110B-0000-1000-8000-00805F9B34FB
04-11 17:21:19.534: INFO/DTUN_HCID4(1233): Calling sink_init
04-11 17:21:19.534: DEBUG/ADAPTER(1233): adapter_get_device(Xx:xx:xx:xx:xx:xx)
04-11 17:21:19.534: DEBUG/DEVICE(1233): btd_device_ref(0xfa10): ref=2
04-11 17:21:19.534: INFO/DTUN_HCID4(1233): sink_init
04-11 17:21:19.534: DEBUG/DTUN_HCID4(1233): Registered interface org.bluez.AudioSink on path /org/bluez/1233/hci0/dev_xx_xx_xx_xx_xx_xx
04-11 17:21:19.544: ERROR/BluetoothEventLoop.cpp(96): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/1233/hci0/dev_xx_xx_xx_xx_xx_xx
04-11 17:21:19.544: DEBUG/BluetoothService(96): updateDeviceServiceChannelCache(xx:xx:xx:xx:xx:xx)
04-11 17:21:19.554: INFO/DEVICE(1233): pattern = 0000111e-0000-1000-8000-00805f9b34fb, id = 4
04-11 17:21:19.564: DEBUG/BluetoothService(96): uuid(system): 0000111e-0000-1000-8000-00805f9b34fb 4382
04-11 17:21:19.574: VERBOSE/BluetoothEventRedirector(492): Received android.bleutooth.device.action.UUID
04-11 17:21:19.700: WARN/BTLD(1220): ccb timer ticks: 0
04-11 17:21:20.615: INFO//system/bin/btld(1219): ##### USerial_Ioctl: BT_Sleep, 0x8004 ####
04-11 17:21:24.634: DEBUG/dalvikvm(594): GC_EXPLICIT freed 46 objects / 2320 bytes in 50ms
04-11 17:21:24.675: INFO/System.out(1336): public android.bluetooth.BluetoothA2dp(android.content.Context)
04-11 17:21:24.684: DEBUG/BluetoothA2dpService(96): connectSink(xx:xx:xx:xx:xx:xx)
04-11 17:21:24.684: INFO/BluetoothA2dpService(96): checkSinkSuspendState() : state = 1 prevState = 0
04-11 17:21:24.684: INFO/BluetoothA2dpService(96): checkSinkSuspendState() : mTargetA2dpState = -1
04-11 17:21:24.684: INFO/BluetoothA2dpService(96): checkSinkSuspendState() : initialStart = false initialSuspend = false
04-11 17:21:24.694: VERBOSE/BluetoothEventRedirector(492): Received android.bluetooth.a2dp.action.SINK_STATE_CHANGED
04-11 17:21:24.694: DEBUG/CachedBluetoothDevice(492): onProfileStateChanged:[]
04-11 17:21:24.705: DEBUG/BluetoothA2dpService(96): A2DP state : device: BC:47:60:0F:4B:F3 State:0->1
04-11 17:21:24.705: INFO/DTUN_CLNT(1233): Client calling DTUN_METHOD_AM_AV_OPEN (id 20)
04-11 17:21:24.705: INFO/(1220): DTUN_ReceiveCtrlMsg: [DTUN] Received message [BTLIF_DTUN_METHOD_CALL] 4354
04-11 17:21:24.705: INFO/(1220): handle_method_call: handle_method_call :: received DTUN_METHOD_AM_AV_OPEN (id 20), len 6
04-11 17:21:24.705: ERROR/BTLD(1220): reset flags
04-11 17:21:24.705: WARN/BTLD(1220): ccb timer ticks: 0
04-11 17:21:24.705: DEBUG/DTUN_HCID4(1233): stream creation in progress
04-11 17:21:24.714: INFO//system/bin/btld(1219): ##### USerial_Ioctl: BT_Wake, 0x8003 ####
04-11 17:21:24.958: WARN/BTLD(1220): process_service_search_attr_rsp
04-11 17:21:25.017: WARN/BTLD(1220): ccb timer ticks: 0
04-11 17:21:25.227: ERROR/BTLD(1220): bta_av_rc_create ACP handle exist for shdl:0
04-11 17:21:25.325: WARN/BTLD(1220): bta_dm_rm_cback:0, status:1
04-11 17:21:25.325: WARN/BTLD(1220): bta_dm_act no entry for connected service cbs
04-11 17:21:25.325: INFO/BTL-IFS(1220): send_ctrl_msg: [BTL_IFS CTRL] send BTLIF_DTUN_SIGNAL_EVT (CTRL) 44 pbytes (hdl 15)
04-11 17:21:25.325: WARN/BTLD(1220): btui_av_callback(BTA_AV_OPEN_EVT::FAILED (page-timeout or protocol)::status: 3
04-11 17:21:25.325: INFO/DTUN_HCID4(1233): pending
04-11 17:21:25.325: INFO/DTUN_HCID4(1233): orig_msg = e588
04-11 17:21:25.325: ERROR/BluetoothA2dpService.cpp(96): onConnectSinkResult: D-Bus error: org.bluez.Error.Failed (Stream connection failed)
04-11 17:21:25.325: INFO/BluetoothA2dpService(96): checkSinkSuspendState() : state = 0 prevState = 1
04-11 17:21:25.325: INFO/BluetoothA2dpService(96): checkSinkSuspendState() : mTargetA2dpState = -1
04-11 17:21:25.325: INFO/BluetoothA2dpService(96): checkSinkSuspendState() : initialStart = false initialSuspend = false
04-11 17:21:25.334: VERBOSE/BluetoothEventRedirector(492): Received android.bluetooth.a2dp.action.SINK_STATE_CHANGED
04-11 17:21:25.334: INFO/BluetoothEventRedirector(492): Failed to connect BT A2DP
04-11 17:21:25.334: DEBUG/CachedBluetoothDevice(492): onProfileStateChanged:[]
04-11 17:21:25.334: DEBUG/BluetoothA2dpService(96): A2DP state : device: BC:47:60:0F:4B:F3 State:1->0
04-11 17:21:25.925: INFO//system/bin/btld(1219): ##### USerial_Ioctl: BT_Sleep, 0x8004 ####
04-11 17:21:26.775: WARN/BTLD(1220): ccb timer ticks: 2147483648
04-11 17:21:26.785: INFO//system/bin/btld(1219): ##### USerial_Ioctl: BT_Wake, 0x8003 ####
04-11 17:21:27.725: INFO//system/bin/btld(1219): ##### USerial_Ioctl: BT_Sleep, 0x8004 ####
Weiß jemand, was ich falsch mache?
Eine Allgemeine Frage, ist es möglich, schließen Sie zwei Android-Handys per Bluetooth und streamen Sie von einem Handy auf das andere? Haben Sie alternative Ansätze?
Dank
InformationsquelleAutor user679935 | 2011-04-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht über
RFCOMM /SPP
- Verbindung zuA2DP UUID
ist nicht genug - die Profil-Verbindung /Profil-level-Protokoll, das Verfahren, die getan werden müssen, zu implementierenA2DP
- mehr überA2DP
direkt funktioniert überL2CAP protocol
(und erfordert keineRFCOMM
).Können Sie nicht in der Lage sein, es zu tun manuell zwischen 2 Handys auch, weil der Strom ein Gerät muss A2DP sink-und anderen A2DP-Quelle, Handys sind in der Regel nur die Quellgeräte (Quelle für den stream, streamen, auf Spüle, Geräte) , Waschbecken sind
Headsets
oderBluetooth speakers
.Gibt es einen inoffiziellen Weg, erstreckt sich mein Gerät unterstützt A2DP-sink. Ich habe gerade gelesen, dass Bluez unterstützt A2DP sink. Also theoretisch mein Gerät könnte eine A2DP-sink oder brauche ich eine spezielle hardware zum erweitern dieser Funktion? Oder reicht es vielleicht ermöglichen, Waschbecken Unterstützung in der audio.conf-Datei?
ja, Sie können Sie erweitern Android durch die Integration mit A2DP sink von BlueZ - ich glaube, es braucht spezielle hardware.
Wie kann ich dies tun? Wenn ich verlängern möchte mein Samsung Galaxy Tab, dann sollte ich mich der Quelle zu bekommen die bluez-Dateien? Danach erwartet habe ich, etwas zu ändern, irgendwo in den bluez-stack zu aktivieren, A2DP Waschbecken und lege dann meinen code angepasst für das galaxy tab? Bin ich richtig oder bin ich Total falsch? Muss ich einen Treiber schreiben? Ich habe keine Ahnung, wie das zu integrieren A2DP in der Galaxie Bluez Stack. Können Sie mir einige Tipps, bitte? Dank
ist es möglich, eine Verbindung zu mehreren a2dp sinkt von android? und spielen Sie denselben Inhalt auf alle Waschbecken?
InformationsquelleAutor Dennis Mathews