2010-07-02 8 views
21

Ja, ich weiß Android hat das Bluetooth Headset Profil bereits implementiert, aber es ist in der Audio Gateway Rolle, nicht in der Rolle HeadSet.Wie Android-Telefon als Bluetooth-Headset zu machen?

Was ich tun möchte, ist die Entwicklung einer Anwendung auf Android-Handy, die wird als Bluetooth-Headset fungieren, so dass es zu meinem Laptop von Bluetooth verbinden kann. Wenn ich versuche, jemanden anzurufen, kann ich mein Telefon verwenden, um ihn zu wählen, und meine Anwendung wird die Stimme über Bluetooth an meinen Laptop, weiterleiten und eine andere Anwendung auf Laptop wird die Sprachdaten erhalten und sie an Skype weiterleiten oder GTalk oder irgendein VoIP-Programm sonst.

Mit anderen Worten, wie kann ich das Headset-Profil in Headset Rolle auf Android-Handy implementieren? Danke im Voraus!

+0

Ich möchte ähnliche Funktionalität. Ich möchte Anrufe vom PC machen lassen, die Audio (VOICE_DOWNLINK) als Lautsprecher zum PC zurückgeschickt haben. aber behalten Sie das Mikrofon am Telefon – Mark

+0

Dies ist keine triviale Anfrage; in bluez bei einem minumum müssten Sie a) die Freisprechfunktion zum SDP-Datensatz hinzufügen. b) Entfernen Sie das Audio-Gateway vom SDP-Datensatz. c) Ändern Sie die Geräteklasse des Telefons, um ein Headset nachzuahmen. Dies ist nur eine Verbindung über das Freisprechprofil. Was das Senden von Audio usw. angeht, ist das eine weitere Herausforderung. Ich bin mir nicht sicher, ob Bluedroid überhaupt Unterstützung dafür hat, vielleicht brauchen Sie einen angepassten Kernel. – TwinPrimesAreEz

Antwort

4

aus der Android Seite, ich glaube, die beste Lösung, um die Verbindung zum Dienst in Ihrem Computer zu öffnen ist: es

URL url = new URL("http://192.186.0.1/path/to/service"); 
URLConnection connection = url.openConnection(); 

Erhalten Sie als Output:

OutputStream out = new BufferedStream(connection.getOutputStream()); 

und dann Verwenden Sie einen AudioRecord, um die aufgezeichneten Daten zu senden:

public static final int DEFAULT_SAMPLE_RATE = 8000; 
private static final int DEFAULT_BUFFER_SIZE = 4096; 
private static final int CALLBACK_PERIOD = 4000; 

AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, 
      DEFAULT_SAMPLE_RATE, AudioFormat.CHANNEL_CONFIGURATION_DEFAULT, 
      AudioFormat.ENCODING_DEFAULT, DEFAULT_BUFFER_SIZE); 
recorder.setPositionNotificationPeriod(CALLBACK_PERIOD); 

int bytesRead = 0; 
ByteBuffer buffer = ByteBuffer.allocateDirect(DEFAULT_BUFFER_SIZE); 
while ((bytesRead = recorder.read(buffer, DEFAULT_BUFFER_SIZE)) > 0) { 
    out.write(buffer.array(), 0, bytesRead); 
} 

All dies sollte natürlich in einem separaten Thread erfolgen, um einen Absturz der App und einen Mechanismus zu vermeiden, wenn die Aufzeichnung stoppt oder die Verbindung unterbrochen wird. Auch ich bin mir ziemlich sicher, dass es über WLAN funktionieren sollte, obwohl ich nicht sicher bin, ob es mit Bluetooth dasselbe sein wird (obwohl die meisten Geräte mit BT jetzt wlan haben und Sie mehr Bandbreite bekommen)

Ich habe nicht Ich habe diesen Code getestet, also bin ich nicht 100% sicher, dass es funktioniert.

Das nächste Ding wird auf der Maschine sein, um das Audio in die Wunschanwendung zu übertragen, aber das ist über meiner Erfahrung. Ich stelle mir vor, dass du einen virtuellen Fahrer oder so etwas machen musst. Auch muss der umgekehrte Mechanismus für die Audio von der Desktop-App in das Telefon gesendet werden (Ich bin eher daran interessiert, da würde eine schöne drahtlose Headset zum Ansehen von Filmen als auch machen).

Hier sind meine 2 Cent; Ich bin gespannt, ob es funktioniert. ;)

+0

Das Aufzeichnen von Audiostreams von der Telefonleitung während eines Sprachanrufs ist auf den meisten Android-Telefonen auf Firmware-/Treiberebene blockiert. Sie können den benutzerdefinierten Kernel verwenden, um solche Funktionen auf einigen Telefonen freizuschalten. – kord

1

Ich weiß nicht, ob ich die eigentliche Frage oder dein Hauptziel verstanden habe ... aber ich hatte gepostet here wie empfangen und senden Sie den Ton von Ihrem Headset über Bluetooth in Android.

Ich hoffe, Ihnen zu helfen ...

Verwandte Themen