Ошибка при попытке записи телефонных звонков андроида - PullRequest
0 голосов
/ 14 сентября 2018

У меня возникли проблемы при попытке записи разговора 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

Примечания:

  1. если я изменю источник звука на «MIC», он будет записывать только с микрофона, но это не то, что я хочу. Я хочу иметь возможность записать обе стороны вызова.

  2. Допускается любой взлом, так как это только для POC. (устройство рутировано)

Заранее спасибо!

...