文件权限被拒绝

File permission denied

我正在 API 22 的 galaxy S5 和 API 25 的 Nexus 6P 上测试我的应用程序。我的应用程序是用 23 编译的。

我正在尝试从 obb 文件中读取图像:

Bitmap bmImg = BitmapFactory.decodeFile(obbPath+"img1.jpg"));

当我在我的 Nexus 6P 上 运行 时没有问题,但是对于 galaxy S5 它给出了错误:

01-18 14:42:36.007 14032-14032/com.nick.app E/BitmapFactory: 
Unable to decode stream: java.io.FileNotFoundException: 
/mnt/obb/8a0cd43307e4b1f6568009da3580d11f/img1.jpg: open failed: EACCES (Permission denied)

在我的 android 清单中,我声明了如下权限:

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

这个错误让我感到困惑,因为它出现在旧设备上,而不是新设备上,我 运行time 权限我已经 not 实现了。有什么建议吗?

My app is compiled with 23.

你的 compileSdk 是什么并不重要,但重要的是你的 targetSdk 是什么。如果这是 23 或更高版本,那么如果您 运行 您的应用程序在 Android 6.0 或更高版本上,那么您的清单权限并不重要,因为在这种情况下您 必须 支持 运行 时间权限为 documented here

有一些库可以简化实现 运行 时间权限的任务,但如果您真的不需要应用程序中的任何 API23+ 功能,您应该能够简单地降低 targetSdk22 然后让您的清单权限在任何平台上得到尊重。

奇怪的是,重启设备足以解决我的问题。起初没想到要这样做,但现在已经奏效了。这个问题对我来说很奇怪,但现在已经解决了。