2012-06-25 7 views
7

Sto scaricando un file audio nella cache dell'applicazione Android che deve essere accessibile con MediaPlayer. Il file viene creato con le autorizzazioni di -rw ------- (come si vede in Esplora file di Eclipse).Come impostare il permesso per il file su MODE_WORLD_READABLE

Con queste autorizzazioni, MediaPlayer non può accedere al file audio. Fallimento è mostrato in logcat come:

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

mia app livello target API 8.

Come faccio a impostare i permessi del file audio scaricati per renderlo leggibile dal MediaPlayer?

A proposito, sto creando il file con:

FileOutputStream out = new FileOutputStream(fRecording); 

Quando provo a creare il file come MODE_WORLD_READABLE, viene creato alcun file:

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

L'errore logcat utilizzando openFileOutput è :

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

Quando cambio la linea a "FileOutputStream out = activity.openFileOutput (fRecording, Activity .MODE_WORLD_READABLE);" Vedo un messaggio di errore in Eclipse di "Il metodo openFileOutput (String, int) nel tipo ContextWrapper non è applicabile per gli argomenti (File, int)" –

+0

Dovrebbe essere, FileOutputStream out = activity.openFileOutput (" ", Activity.MODE_WORLD_READABLE); – user370305

+0

Il file viene creato con le autorizzazioni corrette, ma sembra essere spostato "automaticamente" dalla cache ai file all'interno della mia applicazione. Inizierò una nuova domanda. –

risposta

3
  • Chiama il numero openFileOutput() con il nome del file e la modalità operativa . Restituisce un FileOutputStream con autorizzazione MODE_WORLD_READABLE.

  • Scrivi nel file con write().

  • Chiudere lo stream con close().

Ad esempio: (Codice in file txt, nel tuo caso il suo un file audio apportare modifiche in base ad esso)

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

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

Se vuoi passare il file hai bisogno anche del nome del file. Che ottieni con 'getFileStreamPath (FILENAME);' – Martin

2

Partendo API 9 File oggetto ha setReadable metodo (anche setWritable e setExecutable). E 'due args versione può essere utilizzato per impostare l'autorizzazione di lettura per tutti gli utenti, come pure (cioè diventa -rw-r--r-- nel tuo caso):

File file = new File("path_to_your_file"); 
file.setReadable(true, false);