如何访问目录“/ storage / emulated”

时间:2016-07-05 12:30:00

标签: android

我在 Marshmallow(api 23)

我已经声明了相对权限并在运行时请求了这些权限。我通过{{1}获得了external storage directory - “/ storage / emulated / 0” }。使用此文件实例(此处我称之为Environment.getExternalStorageDirectory()),extF不为空。但是extF.listFiles()返回null。

在adb shell中,我检查了extF.getParentFile().listFiles()目录,并且确实有两个子目录:

"/storage/emulated"

0

那么,为什么我不能在obb"/storage/emulated"上获取Marshmallow(api23)的子文件?谢谢你的解释。

3 个答案:

答案 0 :(得分:1)

你可以像这样获得marshmallow中的文件列表

    //this function will check for runtime permission so Add this block in your OnCreate() Method

    if(checkandRequestPermission()) {

        File sdCardRoot = Environment.getExternalStorageDirectory();
                Log.w("SDCardRoot", "" + sdCardRoot);
                File yourDir = new File(sdCardRoot, "/yourFolderName");

                // This will check if directory is exist or not
                if (!yourDir.exists()) {
                    yourDir.mkdirs();
                }

                if(yourDir.isDirectory()){

                    File[] content = yourDir.listFiles();
                    for(int i = 0; i<content.length;i++){

                        // Your List of Files
                        Log.w("List", "" + String.valueOf(content[i]));

                    }
    }

现在如果你使用的是api level 23,那么你需要像这样添加运行时权限

// Declare this function to check for runtime permission 

private boolean checkandRequestPermission(){

        int storageread = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);

        List<String> listpermissionNeeded = new ArrayList<>();

        if (storageread != PackageManager.PERMISSION_GRANTED) {
            listpermissionNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
        }


        if (!listpermissionNeeded.isEmpty()) {
            ActivityCompat.requestPermissions(this, listpermissionNeeded.toArray(new String[listpermissionNeeded.size()]),REQUEST_ID_MULTIPLE_PERMISSIONS);
            return false;
        }
        return true;
    }

在Manifiest中添加此权限

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

答案 1 :(得分:0)

  

那么,为什么我不能通过File.listFiles()获取这些文件?

您的应用对该目录没有读取权限。

答案 2 :(得分:0)

可能是Manifest中的权限问题: android:name =“android.permission.READ_EXTERNAL_STORAGE”*

如果这不起作用,只需确定路径是否正确

下面的代码对我有用

File f = new File(Environment.getExternalStorageDirectory()+ "");
        if (f.exists()) {
        File[] dff= f.listFiles();
        }else{
            Logs.debug("siz","Files not existed.");
        }