打开在同一个应用程序中创建的文件时,权限被拒绝

时间:2014-12-20 21:54:02

标签: android

我有一个应用程序从互联网下载指定的声音文件并将其保存到设备。这工作正常,因为我能够在ddms中看到该文件。我还从设备中提取文件以验证它是否已损坏并且没问题。问题是当我尝试播放该文件时,我得到了许可被拒绝。

我使用以下方法创建了文件:

FileOutputStream('path/to/file') 

就像我说它创建了文件并保存得很好所以我不打算在其上包含完整的代码。但是当我尝试使用以下命令运行它时:

File file = new File(getFilesDir() + File.separator + "sounds", fileName);
MediaPlayer mediaPlayer = MediaPlayer.create(context, Uri.fromFile(file));
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        mp.release();
    }
});
mediaPlayer.start();

是我收到权限错误时:

Failed to open file '/data/data/com.myapp/files/sounds/sound_2.mp3'. (Permission denied)

创建文件时我应该做些什么吗?当我在ddms中查看文件时,它似乎具有读写权限,但它只是不让我打开它。

我在清单中也有这个权限:

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

修改 在网上尝试了各种各样的事情后,我尝试了:

openFileOutput('file_name.mp3', Context.MODE_PRIVATE)

具有相同的结果。但后来我尝试了:

openFileOutput('file_name.mp3', Context.MODE_WORLD_READABLE)

那就有用了!

所以我比较了文件权限。使用第一种方式(FileOutputStream),它创建了具有权限-rw -----的文件,openFileOutput使用标志MODE_PRIVATE它具有权限-rw-rw ----并且使用MODE_WORLD_READABLE它具有权限-rw- RW-R -

不推荐使用MODE_WORLD_READABLE,文档说不要使用它,因为它很危险。那么有没有其他方法可以打开由同一个应用程序创建的文件?

EDIT2 我几乎已经确定它与MediaPlayer的工作方式有关。它似乎打开文件,就像它不在同一个应用程序中。因此它会获得权限错误,除非它是世界可读的。我不知道这是一个错误还是有意,但如果有人有解决方法,我会很高兴。

0 个答案:

没有答案