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