我在带有Marshmallow的虚拟连接5上测试我的应用程序
我收到有关虚拟SD卡准备就绪的通知,我尝试选择内部和外部存储。
我通过拖放到模拟器将文本文件上传到sdcard / Download。
我已将<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
甚至<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
添加到我的清单中。
当我尝试使用此代码
等代码读取SD卡时 File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard,"Download/gradle.build");
try {
BufferedReader br = new BufferedReader(new FileReader(file))
...}
我得到一个开放的失败... EACCESS - 权限被拒绝异常抛出。
为什么我不能从SD卡读取文件?感谢。
答案 0 :(得分:2)
由于您的目标是marshmallow或更高版本的设备,因此您必须在运行时授予权限,并且在manifest中声明的权限并不意味着什么。因此,在访问任何与读取或写入相关的文件之前,必须给出如下所示的权限。
首先通过查看
来检查是否已经给出了许可 // Assume this Activity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permissionCheck==PackageManager.PERMISSION_GRANTED){
//this means permission is granted and you can do read and write
}else{
requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_PERMISSION);
}
此处是权限guide
答案 1 :(得分:1)
Request permission at runtime是Android 6.0版中添加的一项功能。想法是安装应用程序时,客户只需在不知道安全风险的情况下授予权限。必须在运行时授予危险权限,以便用户知道风险,在这种情况下,您希望使用SD存储,因为(在此提供理由)。祝你好运。