繁体   English   中英

写入RandomAccessFile时权限被拒绝

[英]Permission denied when writing a RandomAccessFile

编辑:我的问题不是重复的Android权限不起作用,即使我已经声明了它,因为我在运行时要求权限

Edit2:将文件写入Environment.getexternalstoragedirectory是可以的,但是对sdcard会给出该错误

嘿,我正在尝试使用RandomAccessFile将mp3文件写入sdcard,这是我的代码:

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();
    }
}

我在logcat遇到此错误:

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

但是我有读写权限,为什么会这样?

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

那似乎是可移动存储上的一个位置。 您没有对Android 4.4+设备上可移动存储中任意位置的读取或写入权限。

但我有读写权限

您可能具有对外部存储的读取和/或写入权限。 外部存储设备不是可移动存储设备。

如果您写入此权限,则可以访问该权限。 但是,在棉花糖之上,您必须包括如何处理运行时权限。

这是解决方案链接。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM