【发布时间】:2016-12-02 23:50:14
【问题描述】:
以下代码输出为“Write grant”,但之后出现错误 '/storage/emulated/0/Download/test.txt: open failed: EACCES (Permission denied)'
怎么了?
@RunWith(AndroidJUnit4.class)
public class FileStorageTest {
private static final String TAG = FileStorageTest.class.getSimpleName();
@Test
public void test() throws Exception {
Context context = InstrumentationRegistry.getTargetContext();
if (context.checkSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE") == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "Write granted");
} else {
Log.e(TAG, "Write refused");
}
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),"test.txt");
new FileOutputStream(file).close();
}
}
【问题讨论】:
-
可能你还需要使用
READ_EXTERNAL_STORAGE permission to read data from the device. -
@TimCastelijns 先生,我们不需要在
Runtime定义这两个权限吗? -
@jaydroider 你可以,但文档说 如果应用程序请求其清单中列出的危险权限,并且该应用程序已经在同一权限组中拥有另一个危险权限,系统会立即授予无需与用户进行任何交互的许可。
-
你的sdk版本是>=23吗?
-
是的,我的错。授予 1 不会授予另一个,但它所做的是在您请求时自动授予另一个
标签: android file android-permissions