У меня возникли проблемы при попытке записи разговора GSM. Разрабатываемое мной приложение работает на устройстве с доступом с правами root и установило apk в / system / priv-app. Таким образом, мое приложение имеет системные разрешения. Я проверил, что мое приложение ведет себя как системное приложение со следующим кодом:
if ((this.getApplicationInfo().flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
Timber.d("This is a system application");
} else {
Timber.d("This is not a system application");
}
и я вижу журналы:
D/HomeActivity: This is a system application
Это мой метод начала записи:
public void startRecording(String filePath) throws IOException {
recorder = new MediaRecorder();
String state = android.os.Environment.getExternalStorageState();
if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) {
throw new IOException("SD Card is not mounted. It is " + state + ".");
}
// make sure the directory we plan to store the recording in exists
File directory = new File(filePath).getParentFile();
if (!directory.exists() && !directory.mkdirs()) {
throw new IOException("Path to file could not be created.");
}
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
recorder.setOutputFile(filePath);
recorder.setOnErrorListener(errorListener);
recorder.setOnInfoListener(infoListener);
try {
recorder.prepare();
recorder.start();
isRecording = true;
} catch (Exception e) {
Timber.e("Error while starting media recorder " + e.getMessage());
}
}
private MediaRecorder.OnErrorListener errorListener = new MediaRecorder.OnErrorListener() {
@Override
public void onError(MediaRecorder mr, int what, int extra) {
Timber.e("Error in settings output file: " + what + ", " + extra);
}
};
private MediaRecorder.OnInfoListener infoListener = new MediaRecorder.OnInfoListener() {
@Override
public void onInfo(MediaRecorder mr, int what, int extra) {
Timber.e("Warning: " + what + ", " + extra);
}
};
при вызове этого метода я получаю эту ошибку в журналах:
09-14 15:37:44.532 24460-24460/package_name E/MediaRecorder: start failed: -2147483648
09-14 15:37:44.534 24460-24460/package_name E/MyAudioRecorder: Error while starting media recorder start failed
Примечания:
если я изменю источник звука на «MIC», он будет записывать только с микрофона, но это не то, что я хочу. Я хочу иметь возможность записать обе стороны вызова.
Допускается любой взлом, так как это только для POC. (устройство рутировано)
Заранее спасибо!