4

Ich arbeite an Aufzeichnungen ein Telefonanrufe. Wenn ich einen Telefonanruf aufnehme, dann ist es leider halt. & es gibt Fehler MediaRecorder Start fehlgeschlagen -2147483648. I Bitte sagen Sie mir, was ist das Problem in meinem Code? Hier ist mein Code.java.lang.RuntimeException: Start fehlgeschlagen bei android.media.MediaRecorder.start (Native Methode)

public class incomingcall extends BroadcastReceiver { 
Context c; 
MediaRecorder recorder; 
public incomingcall() { 
} 
@Override 
public void onReceive(Context context, Intent intent) { 
    c = context; 
    try { 
     PhoneStateChangeListener pscl = new PhoneStateChangeListener(); 
     TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     tm.listen(pscl, PhoneStateListener.LISTEN_CALL_STATE); 
    } catch (Exception e) { 
     Log.e("", "", e); 
    } 
} 

private class PhoneStateChangeListener extends PhoneStateListener { 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
     switch (state) { 
      case TelephonyManager.CALL_STATE_RINGING: 
       Toast.makeText(c, "ring", Toast.LENGTH_SHORT).show(); 
       break; 
      case TelephonyManager.CALL_STATE_OFFHOOK: 
       startRecording(); 
       Toast.makeText(c, "offhook", Toast.LENGTH_SHORT).show(); 
       break; 
      case TelephonyManager.CALL_STATE_IDLE: 
       stopRecording(); 
       Toast.makeText(c, "idle", Toast.LENGTH_SHORT).show(); 
       break; 
     } 
    } 
} 
private void startRecording() { 
    try { 
     recorder = new MediaRecorder(); 
     recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     String file=c.getFilesDir().getAbsolutePath(); 
     file+="/sound.3gp"; 
     recorder.setOutputFile(file); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     recorder.prepare(); 
     recorder.start(); 
    } catch (IOException e) { 
     Log.e("", "prepare() failed", e); 
    } 
} 
private void stopRecording() { 
    try { 
     recorder.stop(); 
     recorder.release(); 
     recorder = null; 
    } catch (Exception e) { 
     Log.e("", "", e); 
    } 
} 
} 

Log

07-20 15:33:47.867 18525-18525/in.pounkumar.callblocker E/MediaRecorder: start failed: -2147483648 
07-20 15:33:47.868 18525-18525/in.pounkumar.callblocker E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: in.pounkumar.callblocker, PID: 18525 
                      java.lang.RuntimeException: start failed. 
                       at android.media.MediaRecorder.start(Native Method) 
                       at in.pounkumar.callblocker.incomingcall.startRecording(incomingcall.java:73) 
                       at in.pounkumar.callblocker.incomingcall.access$100(incomingcall.java:20) 
                       at in.pounkumar.callblocker.incomingcall$PhoneStateChangeListener.onCallStateChanged(incomingcall.java:53) 
                       at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:295) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:148) 
                       at android.app.ActivityThread.main(ActivityThread.java:5417) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+0

Haben Sie Berechtigungen, Audio in Ihrer Manifestdatei aufzuzeichnen? –

+0

ya, ich habe diese –

+0

@PounKumarPurushothaman bereits hinzugefügt, die Android-Betriebssystemversion 6.0? –

Antwort

1

MediaRecorder.AudioSource.VOICE_CALL Quelle erfordert die CAPTURE_AUDIO_OUTPUT Erlaubnis. See Android Docs

Haben Sie diese Berechtigung in Ihrem hinzugefügt manifest

<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" /> 
+0

es hilft nicht –

+0

@PounKumarPurushothman Welche Berechtigung haben Sie in Manifest hinzugefügt? –

+0

0

Die MediaRecorder.start Methode in Ihrem Fall nicht, dies durch:

recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 

Der Grund, warum MediaRecorder.AudioSource.VOICE_CALL Quelle funktioniert nicht hängt davon ab, Ihr Gerätehersteller/Land usw.

Also wirft dies eine Ausnahme als MediaRecorder.AudioSource.VOICE_CALL ist NICHT unterstützt auf Ihrem Gerät.

versuchen, es zu MediaRecorder.AudioSource.MIC ändern und es wird funktionieren:

recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 

lesen this für weitere Details.

+0

es funktioniert auch nicht @Ashish Ranjan –

+0

versuchen mit 'MediaRecorder.AudioSource.CAMCORDER' –

+0

funktioniert nicht bro –

1

Ich habe das gleiche Problem und ich löste es durch verschiedene Initialisierungen für Samsung und LG Geräte.

 String manufacturer = Build.MANUFACTURER; 
    if (manufacturer.toLowerCase().contains("samsung")) { 
     recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION); 
    } else { 
     recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 
    } 

Ich hoffe, es hilft Ihnen.

+0

Vielen Dank! Ich wurde enttäuscht über das Ausführen meiner App auf Samsung-Handys. Wie haben Sie das gefunden? Können Sie einen Link zu einem Dokument darüber? – Jalal

+0

Durch Versuch und Irrtum Hinweis, Android 7 Blockiert diese Optionen – eyal

+0

Welche Option meinen Sie? Ich habe dies auf Samsung Note 6 mit Andro versucht ID 7 und es hat funktioniert! – Jalal