Android Звук MediaRecorder исчезает через 50 секунд, но рекордер все еще записывает - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь записывать вызовы на android мобильных телефонах, поэтому, ссылаясь на этот вопрос о стекере Как записывать телефонные звонки в android? Я использовал следующий код, хотя он отлично работает, но записанный звук останавливается примерно через 40-50 секунд звука, но сам файл имеет продолжительность звонка, я пробовал приложение на разных мобильных телефонах с разными версиями android, также пробовал разные реализации, такие как создание службы, намерение и отображение уведомления о том, что я ' m запись.

Я искал в inte rnet рекордеры с открытым исходным кодом и нашел BeatriceFendt / android -call-рекордер , так что я построил его, и точно так же происходит, звук останавливается через 40-50 секунд, и продолжительность записи совпадает с продолжительностью вызова.

private void startRecording() {
        File sampleDir = new File(Environment.getExternalStorageDirectory(), "/TestRecordingDasa1");
        if (!sampleDir.exists()) {
            sampleDir.mkdirs();
        }
        String file_name = "Record";
        try {
            audiofile = File.createTempFile(file_name, ".amr", sampleDir);
        } catch (IOException e) {
            e.printStackTrace();
        }
        String path = Environment.getExternalStorageDirectory().getAbsolutePath();

        recorder = new MediaRecorder();
//                          recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);

        recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setOutputFile(audiofile.getAbsolutePath());
        try {
            recorder.prepare();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        recorder.start();
        recordstarted = true;
    }

...