2016-04-30 8 views
0

Edit: Meine Frage Duplikat ist nicht von Android permission doesn't work even if I have declared it, weil ich für die Erlaubnis zur Laufzeit gefragt habenErlaubnis verweigert, wenn ein Random Schreiben

Edit2: Schreiben Datei in Environment.getexternalstoragedirectory ist ok, aber zu sdcard gibt diesen Fehler

Hey ich versuche, eine mP3-Datei mit RandomAccessFile zu schreiben, um sdcard und dies ist mein Code:

public void save(String newFilename) throws IOException, NotSupportedException { 
    if (file.compareTo(new File(newFilename)) == 0) { 
     throw new IllegalArgumentException("Save filename same as source filename"); 
    } 
    RandomAccessFile saveFile = new RandomAccessFile(newFilename, "rw"); 
    try { 
     if (hasId3v2Tag()) { 
      saveFile.write(id3v2Tag.toBytes()); 
     } 
     saveMpegFrames(saveFile); 
     if (hasCustomTag()) { 
      saveFile.write(customTag); 
     } 
     if (hasId3v1Tag()) { 
      saveFile.write(id3v1Tag.toBytes()); 
     } 
    } finally { 
     saveFile.close(); 
    } 
} 

private void saveMpegFrames(RandomAccessFile saveFile) throws IOException { 
    int filePos = xingOffset; 
    if (filePos < 0) filePos = startOffset; 
    if (filePos < 0) return; 
    if (endOffset < filePos) return; 
    RandomAccessFile randomAccessFile = new RandomAccessFile(this.file.getPath(), "r"); 
    byte[] bytes = new byte[bufferLength]; 
    try { 
     randomAccessFile.seek(filePos); 
     while (true) { 
      int bytesRead = randomAccessFile.read(bytes, 0, bufferLength); 
      if (filePos + bytesRead <= endOffset) { 
       saveFile.write(bytes, 0, bytesRead); 
       filePos += bytesRead; 
      } else { 
       saveFile.write(bytes, 0, endOffset - filePos + 1); 
       break; 
      } 
     } 
    } finally { 
     randomAccessFile.close(); 
    } 
} 

und ich erhalte diesen Fehler in logcat:

java.io.FileNotFoundException: /storage/15D5-14F7/Musics/Music/Dream On.mp3: open failed: EACCES (Permission denied) 

aber ich habe schreiben und lesen Erlaubnis, warum ist das passiert?

+1

danke ich werde das tun und entschuldige mich für mein schlechtes Englisch @MikeM. –

+0

siehe http://stackoverflow.com/questions/8854359/exception-open-failed-eacces-permission-denied-on-android – sasikumar

+0

Dank, aber ich habe habe alle von ihnen @sasikumar –

Antwort

1
java.io.FileNotFoundException: /storage/15D5-14F7/Musics/Music/Dream On.mp3: open failed: EACCES (Permission denied) 

, die einen Ort auf removable storage zu sein scheint. Sie haben keinen Lese- oder Schreibzugriff auf beliebige Speicherorte auf Wechselmedien auf Geräten mit Android 4.4 oder höher.

aber ich habe schreiben und Leseberechtigung

Sie könnten lesen und/oder Erlaubnis external storage schreiben. Externer Speicher ist kein Wechselspeicher.

+0

Wie kann ich auf Wechseldatenträger zugreifen? Einige Anwendungen tun das wie RAR –

+0

Verwenden Sie das Storage Access Framework (z. B. 'ACTION_OPEN_DOCUMENT'), damit Benutzer Dateien auf Wechselmedien auswählen können. Das 'Uri', das du zurück bekommst, kann mit einem' ContentResolver' und Methoden wie 'openInputStream()' und 'openOutputStream()' verwendet werden. – CommonsWare

+0

vielen Dank können Sie Ihren Beitrag mit etwas Code bearbeiten? @CommonsWare –

0

Wenn Sie diese Berechtigung schreiben, können Sie auf die Berechtigung zugreifen. Aber über Marshmallow müssen Sie angeben, wie die Laufzeitberechtigung behandelt wird.

dies ist die Lösung Link.

https://blog.xamarin.com/requesting-runtime-permissions-in-android-marshmallow/

+0

Danke, aber ich habe habe, dass –

+0

Sie können die Erlaubnis der App überprüfen. Sie können die Erlaubnis vorher verweigern. –

Verwandte Themen