权限被拒绝阅读sdcard

时间:2017-12-16 16:35:04

标签: android

我在带有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卡读取文件?感谢。

2 个答案:

答案 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存储,因为(在此提供理由)。祝你好运。