Ошибка запуска MediaRecorder - PullRequest
0 голосов
/ 09 мая 2018

Я хочу записать голосовой вызов, но получаю MediaRecorder: сбой запуска: -2147483648

Это мой блок кода записи звонка

   public void SesKayitBaslat(String number) {

        Toast.makeText(context, "ANSWERED", Toast.LENGTH_LONG).show();

        String out = new SimpleDateFormat("dd-MM-yyyy hh-mm-ss").format(new Date());
        File sampleDir = new File(Environment.getExternalStorageDirectory(), "/ASesKaydi");
        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_CALL);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setOutputFile(audiofile.getAbsolutePath());
        try {
            recorder.prepare();
        } catch (IllegalStateException e) {
            Log.e("Eror","1");
            e.printStackTrace();
        } catch (IOException e) {
            Log.e("Eror","2");
            e.printStackTrace();
        }
        if(!recordstarted)
        {

            recorder.start();
            recordstarted = true;
        }
        Log.e("Kayit:", "Başladı");

    }

В чем моя ошибка? Может кто-нибудь мне помочь ? Я попробовал MediaRecorder.AudioSource.VOICE_CALL AND MediaRecorder.AudioSource.VOICE_COMMUNICATION Когда я использовал тип Voice_Communication, я не получил голос звонящего.

1 Ответ

0 голосов
/ 09 мая 2018

код 2147483648 относится к MEDIA_ERROR_SYSTEM (системная ошибка низкого уровня).

На основании документации:

Объект BroadcastReceiver действителен только на время вызова OnReceive (Контекст, Намерение). Как только ваш код возвращается из этого функция, система считает объект законченным и больше не активный.

Другими словами, ожидаемый вами экземпляр MediaRecorder может фактически не существовать, поскольку вы находитесь в другом экземпляре BroadcastReceiver, чем тот, который создал MediaRecorder. Это не очень хорошая идея, чтобы выполнить эту задачу в BroadcastReceiver, поскольку она будет выполняться только в течение 10 секунд, после чего Система может объявить приложение не отвечающим.

Одним из решений было бы выполнение этого кода для Service

...