trying to record call, I am using MediaRecorder class
when using AudioSource.MIC
or AudioSource.VOICE_COMMUNICATION
its recording only my voice not from recevier
and when I use AudioSource.VOICE_CALL
it gives exception on attending call..
here is code
if(intent.getAction().equals("android.intent.action.PHONE_STATE")){
if((bundle = intent.getExtras()) != null){
state = bundle.getString(TelephonyManager.EXTRA_STATE);
if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
inCall = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
wasRinging = true;
Toast.makeText(context, inCall + " is calling", Toast.LENGTH_SHORT).show();
}
else if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
if(wasRinging){
Toast.makeText(context, "Call Answered", Toast.LENGTH_SHORT).show();
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy_HH-mm-ss");
String filename = "rec_" + format.format(date) + ".mp3";
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getPath();
String fileUri = path + "/" + filename;
Log.v("testing uri", fileUri);
File file = new File(fileUri);
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setOutputFile(file.getAbsolutePath());
try {
recorder.prepare();
recorder.start();
recording = true;
} catch (IOException e) {
e.printStackTrace();
}
}
}
else if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
wasRinging = false;
Toast.makeText(context, "Cancelled", Toast.LENGTH_SHORT).show();
if(recording && recorder != null){
recorder.stop();
recorder = null;
recording = false;
}
}
}
}
And this is error..
java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.PHONE_STATE flg=0x10 (has extras) } in com.asadullah.callrecorder.MyBroadCastReceiver@41d6c7a8
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:778)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5102)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: start failed.
at android.media.MediaRecorder.start(Native Method)
at com.asadullah.callrecorder.MyBroadCastReceiver.onReceive(MyBroadCastReceiver.java:62)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:768)
manifests permissions are:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.STORAGE" />
VOICE_CALL
is deprecated now. That is why this error occurred.
Use VOICE_COMMUNICATION
as AudioSource as it is microphone audio source tuned for voice communications such as VoIP.
I am also working with call recording app but it failed in Android 7.1.1
If you are not trying call record on Android 7.1.1 below code will work.
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
In order to use VOICE_CALL you need to take special permission.
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT"
tools:ignore="ProtectedPermissions" />
I think you require some permissions before recording in newer version of android (Api 23). Check out this SO question - Recording calls in android why this not works
Permissions
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
And if you require more help you can even check official document for more info regarding this error.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With