У меня возникла проблема с созданием приложения для записи разговоров. Я знаю, что это невозможно для обычного android, но у меня есть root привилегии. У меня есть эти разрешения в файле манифеста:
<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.RECORD_AUDIO" />
<uses-permission android:name="android.permission.STORAGE" />
, и я использую:
callrecorder = new MediaRecorder();
callrecorder.setAudioSource(MediaRecorder.AudioSource.CALL_PHONE);
callrecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
callrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
callrecorder.setOutputFile(Environment.getExternalStorageDirectory() + "/Download/file.amr");
try {
callrecorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
}
try {
callrecorder.start();
} catch (Exception e) {
e.printStackTrace();
}
И у меня есть ошибка:
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)
Когда я использую, например,
callrecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
все нормально.