Java 创建具有根权限的呼叫记录应用程序时出现问题

Java 创建具有根权限的呼叫记录应用程序时出现问题,java,android,call,voice,Java,Android,Call,Voice,我正在尝试使用custome Havock系统和Android 9.0 PIE在小米Redmi 4A上制作一个通话录音应用程序。 您可以在此处找到完整的代码: 我使用MediaRecorder类在电话交谈中录制语音。为了获得高质量的录音,我想将音频源设置为语音通话,而不是麦克风 代码如下: callrecorder = new MediaRecorder(); **callrecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL)

我正在尝试使用custome Havock系统和Android 9.0 PIE在小米Redmi 4A上制作一个通话录音应用程序。 您可以在此处找到完整的代码:

我使用MediaRecorder类在电话交谈中录制语音。为了获得高质量的录音,我想将音频源设置为语音通话,而不是麦克风

代码如下:

callrecorder = new MediaRecorder();
**callrecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);**
callrecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
callrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
callrecorder.setOutputFile(Environment.getExternalStorageDirectory() + "/Download/record.amr");
try {
       callrecorder.prepare();
} catch (IllegalStateException e) {
        e.printStackTrace();
} catch (IOException e) {
}
callrecorder.start();
我有根权限,并且此应用程序被设置为默认呼叫应用程序,但我在尝试开始录制时仍有错误:

System.err: java.lang.RuntimeException: start failed.
System.err:     at android.media.MediaRecorder.start(Native Method)
System.err:     at RecordAnswer.doInBackground(RecordAnswer.java:24)
System.err:     at android.os.AsyncTask$3.call(AsyncTask.java:378)
System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)  
System.err:     at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
System.err:     at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
System.err:     at java.lang.Thread.run(Thread.java:919)
我认为问题出在选择的音频源上,因为当我使用默认源时,它是可以的,但录制质量不是最好的。我之所以关心这一点,是因为我想直接录制
VOICE\u DOWNLINK

这没关系:

`callrecorder = new MediaRecorder();
        **callrecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);**
        callrecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
        callrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
以下是我对manifest.xml的所有权限:

<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS"/>
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS"/>
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.STORAGE" />