2011-01-13 2 views
0

У меня возникает пара проблем с записью звука на устройстве. Код, я использую, если из андроида сайта Dev (Site Link) и выглядит следующим образом:Проблемы с разрешением для записи звука

public void onClickStart(View v) throws IllegalStateException, IOException{ 
     startRecord(); 
    } 

    public void onClickStop(View v) throws IllegalStateException, IOException{ 
     stopRecord(); 
    } 

    private void startRecord() throws IllegalStateException, IOException{ 
     recorder = new MediaRecorder(); 
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //ok so I say audio source is the microphone, is it windows/linux microphone on the emulator? 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     recorder.setOutputFile("/sdcard/test.3gpp"); 
     recorder.prepare(); 
     recorder.start(); 
    } 

    private void stopRecord(){ 
     recorder.stop(); 
//  recorder.release(); 
    } 

С 2 кнопки в основной раскладке которой повернуть как остановить и начать запись (в теории, что есть).

Но из LogCat при попытке это на моем устройстве (на самом деле не может возиться с примерить на эмуляторе) я получаю следующие ошибки:

Error 1: 
ERROR/MediaRecorder(14541): start called in an invalid state: 4 
java.lang.IllegalStateException: Could not execute method of the activity 
Caused by: java.lang.reflect.InvocationTargetException 

Error 2: 
Caused by: java.io.FileNotFoundException: /sdcard/test.3gpp (Permission denied) 

И я также следующие разрешения установлены в моем манифесте. XML-файл:

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

ответ

8

Глупая ошибка здесь, извините, это не сработало, потому что у меня был телефон, установленный на моем ноутбуке, чтобы он не смог дойти до SD-карты.

3

для ошибки 2: попробуйте использовать getExternalStorageDirectory() вместо «SDCard» статический, может быть, этот путь не является действительным/достижим на устройстве.

1

Для других, которые наткнулись на это, исключение не всегда говорит вам, что FileNotFoundException связано с отказом в разрешении. Убедитесь, что на вашем AndroidManifest.xml существует разрешение WRITE_EXTERNAL_STORAGE. В случае с OP это было так.

Даже если вы создаете файл внешней SD-карты (используя команду mksdcard) и связываете его с телефоном, вызов getExternalStorageDirectory() может все же указывать на/sdcard (поскольку контракт метода не гарантирует, что он будет вернуть не внутреннее хранилище). Вы всегда можете использовать команду «adb shell», чтобы проверить, существует ли sdcard. Если вы хотите скопировать файлы на/из SD-карты, используйте команды adb pull// adb push.

Ссылки:

http://developer.android.com/guide/developing/devices/emulator.html#sdcard

How to copy and edit files in Android shell?

writing to sdcard not working

1

ли в выходной файл не хардкорный /sdcard/test.3gpp, вы должны использовать getExternalStorage() использование кода последующей:

boolean exists = (new File(android.os.Environment.getExternalStorageDirectory() + "/Record/")).exists(); 
if (!exists) { 
    new File(android.os.Environment.getExternalStorageDirectory() + "/Record/").mkdirs(); 
} 

и установить этот путь к выходному файлу recorder.setOutputFile(android.os.Environment.getExternalStorageDirectory()+"/Record/test.3gp");

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

1

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

В главном манифеста тега, пожалуйста, убедитесь, у вас есть следующие разрешения:

<uses-permission android:name="android.permission.RECORD_AUDIO"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
Смежные вопросы