2011-06-18 11 views
8

¿Hay alguna forma de ejecutar un archivo de audio al responder una llamada para que NO se reproduzca en la llamada (para que el otro lado pueda oír), pero solo en el lado podría escuchar).Activar un archivo de audio cuando se responde una llamada

Suena extraño, lo sé, pero es parte de una aplicación mucho más grande.

+1

Hola He desarrollado la siguiente aplicación, hace lo mismo, revise esta aplicación si soluciona su problema, entonces puedo enviarle el código fuente. https://market.android.com/details?id=com.devindia.acr&feature=search_result –

+0

@KPBird, parece que puede hacer el truco. Agradecería que enviaras el código para que lo revisemos. Gracias por la oferta. – CraigInDallas

+0

Hola voy a subir el código hoy ... –

Respuesta

1

En primer lugar, deberá configurar un BroadcastReceiver (llamémoslo "CallReceiver") y un permiso para saber sobre el estado del teléfono (intuitivamente, el permiso para agregar es android.permission.READ_PHONE_STATE).

Registre su acción CallReceiver de esta manera.

<receiver android:name=".CallReceiver" android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.intent.action.PHONE_STATE"></action> 
    </intent-filter> 
</receiver> 

A su CallReceiver, puede decidir qué acciones deben reproducir el audio de vuelta (entrada/outcoming/timbre del teléfono ...), por lo que acaba de leer el EXTRA_STATE y getCallState() (echa un vistazo a los documentos TelephonyManager)

Acerca del audio, necesitará usar el AudioManager, y establecer el modo de reproducción "in call" antes de reproducir el sonido.

private AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
am.setMode(AudioManager.MODE_IN_CALL); 
am.setSpeakerphoneOn(false); 

Espero que esto ayude!

0
private void PlayShortAudioFileViaAudioTrack(String filePath) throws IOException { 
// We keep temporarily filePath globally as we have only two sample sounds now.. 
     if (filePath == null) 
      return; 

//Reading the file.. 
     byte[] byteData = null; 
     File file = null; 
     file = new File(filePath); // for ex. path= "/sdcard/samplesound.pcm" or "/sdcard/samplesound.wav" 
     byteData = new byte[(int) file.length()]; 
     FileInputStream in = null; 
     try { 
      in = new FileInputStream(file); 
      in.read(byteData); 
      in.close(); 

     } catch (FileNotFoundException e) { 
// TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
// Set and push to audio track.. 
     int intSize = android.media.AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, 
       AudioFormat.ENCODING_PCM_8BIT); 
     AudioTrack at = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, 
       AudioFormat.ENCODING_PCM_8BIT, intSize, AudioTrack.MODE_STREAM); 
     if (at != null) { 
      at.play(); 
// Write the byte array to the track 
      at.write(byteData, 0, byteData.length); 
      at.stop(); 
      at.release(); 
     } else 
      Log.d("TCAudio", "audio track is not initialised "); 
Cuestiones relacionadas