【问题标题】:Permission denied reading from sdcard权限被拒绝从 sdcard 读取
【发布时间】:2017-12-16 16:35:04
【问题描述】:

我使用 Marshmallow 在虚拟 nexus 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 - 抛出权限被拒绝异常。

为什么我不能从 sdcard 读取文件?谢谢。

【问题讨论】:

标签: android


【解决方案1】:

Request permission at runtime 是 android 6.0 版中添加的一项功能,其想法是在安装应用程序时,客户只需授予权限而不知道安全风险。必须在运行时授予危险权限,因此希望用户知道风险,在这种情况下,您要使用 SD 存储,因为(在此处给出原因)。祝你好运。

【讨论】:

    【解决方案2】:

    由于您的目标是棉花糖或以上设备,因此您必须在运行时授予权限,并且清单中声明的​​权限并不意味着任何事情。因此,在访问任何与文件相关的读取或写入之前,必须授予如下权限。

    首先通过检查来检查是否已经授予权限

           // 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

    【讨论】:

      猜你喜欢
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      相关资源
      最近更新 更多