2010-07-02 17 views
21

Sí, sé que Android ya ha implementado el perfil de auriculares Bluetooth , pero está en la función de puerta de enlace de audio, no en la función HeadSet.¿Cómo hacer un teléfono Android como un auricular bluetooth?

Lo que quiero hacer es desarrollar una aplicación en el teléfono Android que actuará como un auricular bluetooth, por lo que se puede conectar a mi computadora portátil por bluetooth. Cuando trato de llamar a alguien, puedo usar mi teléfono para marcarlo, y mi aplicación reenviará la voz a través de bluetooth a mi computadora portátil, y otra aplicación ejecutándose en la computadora portátil recibirá los datos de voz y los reenviará a Skype o GTalk o algún programa de VoIP más.

En otras palabras, ¿cómo puedo implementar el perfil del auricular en el auricular Rol en el teléfono Android? ¡Gracias por adelantado!

+0

Quiero una funcacionalidad similar. Deseo hacer llamadas desde la pc con audio (VOICE_DOWNLINK) devuelto a la pc como un teléfono con altavoz. pero mantenga el micrófono en el teléfono – Mark

+0

Esta no es una solicitud trivial; en bluez en un mínimo necesitaría a) agregar el rol de manos libres al registro SDP. b) Eliminar la puerta de enlace de audio del registro SDP. c) Cambie la clase de dispositivo del teléfono para imitar un auricular. Esto es solo para conectar sobre el perfil de manos libres. En cuanto a enviar el audio, etc., ese es otro desafío. No estoy seguro de que bluedroid tenga soporte para esto, es posible que necesites un kernel personalizado. – TwinPrimesAreEz

Respuesta

4

Desde el lado androide, creo que la mejor solución es abrir la conexión con el servicio en su ordenador:

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

conseguirá como un OutputStream:

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

y luego utilice un AudioRecord para enviar a través de los datos grabados:

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); 
} 

Todo esto debe hacerse en un hilo separado, por supuesto, para evitar bloquear la aplicación y un mecanismo para manejar cuando la grabación se detiene o la conexión se pierde. Además, estoy bastante seguro de que debería funcionar a través de wifi, aunque no estoy seguro si será lo mismo con bluetooth (aunque la mayoría de los dispositivos con BT tienen wifi ahora y obtienes más ancho de banda)

No tengo probado este código así que no estoy 100% seguro de que funcionará.

Lo siguiente será en la máquina para transferir el audio a la aplicación deseada, pero eso está por encima de mi experiencia. Me imagino que tendrás que hacer un controlador virtual o algo así. También tendrá que hacer el mecanismo inverso para el audio enviado desde la aplicación de escritorio en el teléfono (estoy bastante interesado en esa parte, ya que sería un buen auricular inalámbrico para ver películas también).

Aquí están mis 2 centavos; Estoy ansioso por saber si funciona. ;)

+0

La grabación de la transmisión de audio de la línea telefónica durante la llamada de voz está bloqueada en la mayoría de los teléfonos Android en el nivel de firmware/controlador. Puede usar kernel personalizado para desbloquear dicha funcionalidad en algunos teléfonos. – kord

1

No sé si entendí la verdadera pregunta o su objetivo principal ... pero había publicado here cómo recibir y enviar el sonido de su auricular a través de Bluetooth en Android.

Espero ayudarte ...

Cuestiones relacionadas