Я пытаюсь сделать приложение для записи звонков на Xiaomi Redmi 4A с обычной системой Havock и Android 9.0 P IE. Вы можете найти весь код здесь:
https://github.com/JakubBelka/CallRecording
Я использую класс MediaRecorder для записи голоса во время телефонного разговора. Чтобы получить записи очень хорошего качества, я хочу установить AudioSource как VOICE_CALL вместо микрофона.
Код ниже:
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();
У меня есть разрешения root, и это приложение установлено в качестве вызывающего приложения по умолчанию, но при попытке начать запись по-прежнему возникает ошибка:
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)
Я думаю, что проблема в выбранном аудиоисточнике, потому что когда я использую источник DEFAULT, все в порядке, но качество записи не самое лучшее. Я забочусь об этом, потому что хочу напрямую записать VOICE_DOWNLINK
.
Это нормально:
`callrecorder = new MediaRecorder();
**callrecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);**
callrecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
callrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
Ниже приведены все мои разрешения из манифеста. 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" />