2012-06-25 3 views
7

Я загружаю аудиофайл в кэш моего приложения Android, к которому затем должен обращаться MediaPlayer. Файл создается с разрешениями -rw ------- (как видно из Проводника Eclipse).Как установить разрешение файла для MODE_WORLD_READABLE

С этими разрешениями MediaPlayer не может получить доступ к аудиофайлу. Неудача показана в LogCat как:

java.io.IOException: Prepare failed.: status=0x1 

моего приложение уровень цели API 8.

Как установить разрешение скачанного аудио-файл, чтобы сделать его доступным для чтения с помощью MediaPlayer?

Кстати, я создаю файл с:

FileOutputStream out = new FileOutputStream(fRecording); 

Когда я пытаюсь создать файл как MODE_WORLD_READABLE, файл не создается:

FileOutputStream out = activity.openFileOutput(fRecording.getAbsolutePath(), Activity.MODE_WORLD_READABLE); 

Ошибка LogCat с помощью openFileOutput является :

java.lang.IllegalArgumentException: File /data/data/com.calltrunk.android/cache/727adda7-0ef1-490f-9853-fe13ad1e9416 contains a path separator 
+0

Когда я изменить строку «FileOutputStream из = activity.openFileOutput (fRecording, активность .MODE_WORLD_READABLE);» Я вижу сообщение об ошибке в Eclipse «Метод openFileOutput (String, int) в типе ContextWrapper не применим для аргументов (File, int)» –

+0

Должно быть, FileOutputStream out = activity.openFileOutput («

+0

Файл создается с правильными разрешениями, но он, кажется, перемещается «автоматически» из кеша в файлы моего приложения. Я начну новый вопрос. –

ответ

3
  • Вызвать openFileOutput() с именем файла и операционным режимом . Это возвращает FileOutputStream с разрешением MODE_WORLD_READABLE.

  • Пишите файл write().

  • Закрыть поток с close().

Например: (Код для текстового файла, в вашем случае его аудиофайл сделать изменения в соответствии с ней)

String FILENAME = "hello_file"; 
String string = "hello world!"; 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_WORLD_READABLE); 
fos.write(string.getBytes()); 
fos.close(); 
+0

Если вы хотите передать файл, вам также потребуется имя файла. Который вы получаете с 'getFileStreamPath (FILENAME);' – Martin

2

Начиная с API 9 File объектом имеет setReadable метод (также setWritable и setExecutable). Это два арг версия может быть использована для установки разрешения на чтение для всех пользователей, а также (т.е. становится -rw-r--r-- в вашем случае):

File file = new File("path_to_your_file"); 
file.setReadable(true, false); 
Смежные вопросы