2010-07-30 21 views
16

Lo probé y pega el siguiente código para el registro de llamadas salientes pero no es así ..¿Grabar llamadas telefónicas en el teléfono Android?

@Override 
    public void onReceive(Context context, Intent intent) 
    { 
      this.context = context; 
      if (intent.getAction().equalsIgnoreCase(Intent.ACTION_ANSWER)) 
      { 
       try 
       { 
        phonenbr = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
        Log.v("GDHGDHGHDGDHGDHGHDGHDGH", phonenbr); 
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
        recorder.setOutputFile(pathname); 
        recorder.prepare(); 
        recorder.start(); 
        recordstarted = 1; 
        telManager= (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
       } 
       catch(Exception e) 
       { 
        e.printStackTrace(); 
       } 


       final PhoneStateListener phoneListener = new PhoneStateListener() 
       { 
        @Override 
        public void onCallStateChanged(final int state, final String incomingNumber) 
         { 
          getTelephonyOverview(telManager); 
         } 
       }; 

      telManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 

} 

}

  public void getTelephonyOverview(final TelephonyManager telManager) 
      { 
        int callState = telManager.getCallState(); 
        switch (callState) 
        { 
        case TelephonyManager.CALL_STATE_IDLE: 
        { 
         if (recordstarted==1) 
         { 
          recorder.stop(); 
          recordstarted =0; 
         } 
         break; 
        } 
       } 
      } 

Sírvanse proporcionar una buena solución para este problema ..

+0

si u puede proporcionar Catlog de errores, entonces yo podría ayudar .. –

+0

Hola, soy también en la necesidad de grabando llamadas telefónicas. ¿Tuviste la oportunidad de hacerlo funcionar? – Neutralizer

+1

Idea genial, pero antes de llegar demasiado lejos le sugiero que revise sus leyes locales relacionadas con la privacidad y la grabación de llamadas telefónicas. Sé que en los EE. UU. Hay reglas muy estrictas sobre lo que se puede grabar y notificar al usuario que se están grabando. – bakoyaro

Respuesta

4
  1. No puede grabar llamadas telefónicas muy bien en Android, porque el audio de la llamada no está disponible para las aplicaciones SDK
  2. ACTION_ANSWER es not una emisión Intent
+6

¿Hay alguna otra forma de grabar llamadas telefónicas? –

+0

Eché un vistazo hace un tiempo, y no había forma de hacerlo. – stealthcopter

+0

No hay ni siquiera puede averiguar quién llama hasta que finaliza la llamada (lo cual es genial cuando el teléfono se cuelga a mitad de llamada) – Basic

1

No es posible grabar llamada simplemente grabadora multimedia. usted tiene que también cambiar la configuración del gestor de audio y poner el altavoz antes de iniciar la grabación y la fuente de audio se mantendrá igual (micrófono) .Así tratar de editar el gerente de ajuste de audio


AudioManager audiomanager = (AudioManager)context.getSystemService("audio"); 
int i = audiomanager.getRouting(2); 
audiomanager.setMode(2); 
audiomanager.setMicrophoneMute(false); 
audiomanager.setSpeakerphoneOn(true); 
int j = audiomanager.getStreamMaxVolume(0); 
if(j < 0) 
    j = 1; 
int k = j/2 + 1; 
audiomanager.setStreamVolume(0, k, 0); 
audiomanager.setRouting(2, 11, 15); 
+0

pero ¿cómo poner el altavoz? –

+0

@Kartik Necesita agregar cambio de configuración de audio en su archivo principal. Aquí está mi código: 'AudioManager audiomanager = (AudioManager) context.getSystemService (" audio "); int i = audiomanager.getRouting (2); audiomanager.setMode (2); \t \t audiomanager.setMicrophoneMute (falso); \t audiomanager.setSpeakerphoneOn (true); \t int j = audiomanager.getStreamMaxVolume (0); \t if (j <0) \t j = 1; \t int k = j/2 + 1; audiomanager.setStreamVolume (0, k, 0); \t audiomanager.setRouting (2, 11, 15); ' –

0

Parece que no puedes grabar una llamada desde la API. Una solución común es activar el altavoz y grabar desde el micrófono; en muchos dispositivos, el micrófono captará el altavoz de manera adecuada con esta disposición.

Otra solución es hacer la grabación en un servicio de telefonía en algún lugar y enrutar las llamadas a través de él.

5

Esto se puede resolver con nivel de API 8+. Configure su fuente de audio para grabadora de medios como enlace ascendente, enlace descendente o ambos del teléfono.

recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); //Voice downlink/ Uplink 
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
recorder.setAudioEncoder(AudioEncoder.AAC); 

Pero cuidado con la ley y los reglamentos antes de hacer esto.

+1

Probé esto en mi Droid X, pero sigo recibiendo" stop failed: -1007 "RuntimeException de MediaRecorder en recorder.stop(). recorder.start() pasa sin problema y se crea un archivo de tamaño distinto de cero, pero no se puede reproducir. – ComputerEngineer88

+0

¿Con qué teléfonos ha probado esto? Parece una solución demasiado simple para ser cierto ... y luego tienden a ser :) – rrostt

0

Este código está trabajando para mí grabar llamadas telefónicas salientes, por lo comprobamos por favor Here

Cuestiones relacionadas