MediaRecorder аварийно завершает работу при запуске () на Sprint Galaxy S3 при записи аудио

Этот код отлично работает в живом приложении, но я только что получил отчет об ошибке от пользователя Sprint Galaxy S3. Он вылетает на последней строке с надписью «Ошибка запуска» на их конкретном устройстве. (Устройство не рутировано)

mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setAudioEncoder(MedieRecorder.AudioEncoder.AAC);
mRecorder.setAudioEncodingBitRate(128);
mRecorder.setAudioEncodingBitRate(96 * 1024);  //160 Kbps
mRecorder.setAudioSamplingRate(44100);
mRecorder.setAudioChannels(2); 
mRecorder.setOutputFile(context.getFilesDir().getPath() + "/myfile.caf");
mRecorder.prepare();
mRecorder.start();

person bgolson    schedule 31.12.2013    source источник


Ответы (1)


Убедитесь, что getFilePathAndName() действительно возвращает реальный путь и место для сохранения звукового файла. Когда вы записываете с помощью MediaRecorder, звуковые байты одновременно сохраняются, поэтому он должен знать, где сохранить перед записью. Если этого не произойдет, произойдет сбой при запуске(). Чтобы убедиться, что путь к файлу существует, поместите это в getFilePathAndName():

String pathToExternalStorage = Environment.getExternalStorageDirectory().toString();
File soundDir = new File(pathToExternalStorage + "/" + "YourAppName");   
//Build the directory structure, if needed.
soundDir.mkdirs();
person Chips J.    schedule 31.12.2013
comment
Извините за опечатки, проблемы со вставкой. Может ли это быть новое имя файла, которого еще не существует? - person bgolson; 01.01.2014
comment
Абсолютно. Каталог должен существовать до того, как вы зададите имя файла, но вы можете создать его с помощью mkdirs(). См. API. И если вы планируете записывать много звуковых файлов, я бы рекомендовал использовать функцию даты/времени для ваших имен файлов, чтобы у вас не было проблем с поиском и воспроизведением. Я лично использую System.currentTimeMillis() в своем приложении. - person Chips J.; 01.01.2014
comment
Я заменил вызов getFilePathAndName фактическим встроенным кодом. Интересно, сбивает ли Galaxy S3 расширение .caf? - person bgolson; 01.01.2014
comment
О, да, файлы caf не поддерживаются Android. Это не просто ваше устройство, это ОС. Поддерживаемые аудиоформаты появятся, когда вы заполните параметр для setOutputFormat(). - person Chips J.; 01.01.2014
comment
Но если вы реализуете мой код и используете поддерживаемый аудиоформат, у вас не должно возникнуть проблем с записью. - person Chips J.; 01.01.2014
comment
Как тебе это удалось, бголсон? Вы исправили это? - person Chips J.; 03.01.2014
comment
Спасибо за вашу помощь! Мне все еще нужно предоставить тестовую версию моему пользователю с Galaxy S3. Приложение отлично работает для остальной части нашей базы установки. Я собираюсь попытаться записать файл со стандартным расширением, а затем переименовать файл в .caf. Нам нужно расширение .caf, поскольку файл может синхронизироваться с устройствами iOS. - person bgolson; 04.01.2014