Android mediaRecorder.setAudioSource не удалось

У меня есть прошивка android G1 версии 1.6, я пытаюсь записать голос из приложения с помощью следующего кода.

 MediaRecorder recorder = новый MediaRecorder ();
  recorder.setAudioSource (MediaRecorder.AudioSource.MIC);
  recorder.setOutputFormat (MediaRecorder.OutputFormat.THREE_GPP);
  recorder.setAudioEncoder (MediaRecorder.AudioEncoder.AMR_NB);
  recorder.setOutputFile (PATH_NAME);
  recorder.prepare ();
  recorder.start ();  

У моего manifest.xml есть:

 <Uses-permission android: name = "android.permission.RECORD_AUDIO" />

Я получил:

 09-23 14: 41: 05.531: ERROR / AndroidRuntime (1718): обработчик нечистоты: основной поток из-за неперехваченного исключения
 09-23 14: 41: 05.551: ERROR / AndroidRuntime (1718): java.lang.RuntimeException: сбой setAudioSource.
 09-23 14: 41: 05.551: ОШИБКА / AndroidRuntime (1718): на android.media.MediaRecorder.setAudioSource (собственный метод)

Как правильно записать голос?

Откройте « AndroidManifest.xml » ->

Добавить

 <uses-permission android:name="android.permission.RECORD_AUDIO" /> 

Я знаю, что это очень старый вопрос, но в Android Marshmallow вам нужно перейти в «Настройки»> «Приложения»> «Ваше приложение»> «Разрешения» и включить разрешение микрофона.

Если вы работаете на Android M, вам нужно запросить разрешения для записи звука при первом запуске. Чтобы выполнить это, спросите пользователя, можете ли вы записывать звук при запуске приложения:

 private static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 29; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (mContext.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO}, MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE); } else { Log.d("Home", "Already granted access"); initializeView(v); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { Log.d("Home", "Permission Granted"); initializeView(v); } else { Log.d("Home", "Permission Failed"); Toast.makeText(getActivity().getBaseContext(), "You must allow permission record audio to your mobile device.", Toast.LENGTH_SHORT).show(); getActivity().finish(); } } // Add additional cases for other permissions you may have asked for } } 

ВАЖНО – в течение последних нескольких часов я попытался выяснить, как проверить, был ли MIC обнаружен другим приложением или нет. Я заметил, что если 2 приложения адрес в MediaRecorder в то же время RuntimeException будет брошен, и вы не сможете использовать микрофон, если вы не перезапустите устройство (!!) Я не знаю, если это лучшее решение, но Это сработало для меня. Возможно, это спасет некоторых из вас через несколько часов.

 private void validateMicAvailability() throws MicUnaccessibleException { AudioRecord recorder = new AudioRecord(AudioSource.MIC, 44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_DEFAULT, 44100); try{ if(recorder.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED ){ throw new MicUnaccessibleException("Mic didn't successfully initialized"); } recorder.startRecording(); if(recorder.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING){ recorder.stop(); throw new MicUnaccessibleException("Mic is in use and can't be accessed"); } recorder.stop(); } finally{ recorder.release(); recorder = null; } } 

У меня была эта точная проблема, это решило это для меня:

На устройстве, которое вы используете для отладки, перейдите в Настройки -> Приложения -> {ваше приложение}. Затем убедитесь, что разрешены все разрешения приложения (в данном случае аудиозапись и запись внешнего хранилища).

Как правило, при установке приложения не через Google Play Store вам не дают разрешения предоставить разрешения и на некоторых телефонах это приведет к тому, что ваше приложение для отладки не получит некоторые разрешения.

Проверьте это, даже если некоторые разрешения в файле манифеста распознаются (например, доступ в Интернет), потому что для меня некоторые работали, а некоторые автоматически блокировались.

Надеюсь это поможет.

Пожалуйста, запросите разрешение Manifest.permission.RECORD_AUDIO динамически для Marshmallow и выше версии.

Это выглядит правильно. Убедитесь, что другие другие приложения еще не используют MIC. Возможно, перезапустите телефон и повторите попытку.

Этот код работал для меня

  mRecorder = new MediaRecorder(); mRecorder.reset(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 

Для API 23+ вам необходимо запросить разрешения на чтение и запись, даже если они уже находятся в вашем манифесте.

 // Check for permissions int permission = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE); // If we don't have permissions, ask user for permissions if (permission != PackageManager.PERMISSION_GRANTED) { String[] PERMISSIONS_STORAGE = { android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE }; int REQUEST_EXTERNAL_STORAGE = 1; ActivityCompat.requestPermissions( getActivity(), PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE ); } 

Мое предложение может показаться глупым, но это сработало для меня 🙂

Попробуйте дать разрешение в виде вложенного тега. Я считаю, что есть проблема с синтаксическим анализом xml где-то с библиотекой упаковки Android.

Ответ «validateMicAvailability () выбрасывает MicUnaccessibleException» для меня не работает. Исключение MicUnaccessibleException, похоже, не существует. Я что-то не понимаю?

В качестве пользователя Cyanogenmod я должен был

  1. Убедитесь, что разрешения определены в манифесте (андроид-студия)
  2. Убедитесь, что защитник конфиденциальности разрешил приложению получать доступ к микрофону (на устройстве)
  3. Убедитесь, что система Android установила разрешения в разделе « Settings -> « Apps -> «Выберите свое приложение» -> « Permissions -> «Проверить все разрешения» (должны быть запрошены манифестом) (на устройстве)

После этого перекодировка работала для меня.

+ Изменить

 <uses-permission android:name="android.permission.RECORD_AUDIO" /> 

в

 <uses-permission android:name="android.permission.RECORD_AUDIO" ></uses-permission> 

Работал для меня.

Intereting Posts
Ссылка на Android-приложение не работает нормально Android googlemaps V2 – отключить прокрутку в режиме панорамирования или масштабирования Android не может подключиться к серверу SignalR через WiFi / LAN, а через 3G Android Найти UUID конкретного устройства Bluetooth LayoutInflater.Factory onCreateView не вызывается с поддержкой 22.1+ Как не показывать приложение в списке последних приложений в ICS? ExcludeFromRecents не работает Проблема при использовании пользовательского шрифта – «родной шрифт не может быть создан» Android SharedPreferences putStringSet order / sort Сделайте Android-сервис прослушиванием аппаратных клавиш. Как узнать, отключен ли пользователь на экране блокировки Apo Commons IO на Android Эмуляторные файлы Temp съедают мой диск Могу ли я поместить свои стили Android в разные имена пакетов? Эмулятор Android: как копировать эмулятор / AVD? (Библиотека поддержки дизайна) Элементы панели инструментов за панель состояния