Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
listFiles()在Android 10(作用域存储)中没有任何用处。需要特定目录的文件_Android_File_Android Studio_Android 10.0_Scoped Storage - Fatal编程技术网

listFiles()在Android 10(作用域存储)中没有任何用处。需要特定目录的文件

listFiles()在Android 10(作用域存储)中没有任何用处。需要特定目录的文件,android,file,android-studio,android-10.0,scoped-storage,Android,File,Android Studio,Android 10.0,Scoped Storage,我已经实现了范围存储&需要列出来自第三方应用程序的JPEG文件让我们命名它为Test app,它在以下两个路径中创建“Test”文件夹 在内部存储器中->/storage/emulated/0/Test/.images 在sdcard->/storage/sdcard1/Android/data/com.app.test/files/test/.images中 在Android 10上运行的redmi K20pro中,无论存储范围如何,都会返回.listFiles上的ArrayList 但是,在

我已经实现了范围存储&需要列出来自第三方应用程序的JPEG文件让我们命名它为Test app,它在以下两个路径中创建“Test”文件夹

  • 在内部存储器中->/storage/emulated/0/Test/.images
  • 在sdcard->/storage/sdcard1/Android/data/com.app.test/files/test/.images中
  • 在Android 10上运行的redmi K20pro中,无论存储范围如何,都会返回.listFiles上的ArrayList

    但是,在Android 10上运行的诺基亚6.1如果启用了作用域存储,则返回null;如果启用了作用域存储,则返回null


    请帮助我从这两个文件夹中提取文件。

    我在Android 10上使用了
    listFiles()
    文件,如下所示:

    将此权限添加到项目的AndroidManifest.xml文件:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    
    (可选)处理请求的结果:

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    
        switch (requestCode) {
            case 1: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // permission was granted, Do the you need to do.
                    Toast.makeText(getApplicationContext(), "permission was granted", Toast.LENGTH_SHORT).show();
    
                } else {
    
                    // permission denied, Disable the functionality that depends on this permission.
                    Toast.makeText(getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show();
                }
                return;
            }
        }
    }
    
    然后,您可以使用
    listFiles()
    ,例如列出手机下载目录中的文件:

    File[] files = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).listFiles();
    Log.i(getClass().getName(), "fileList = " + Arrays.toString(files));
    

    如果您提供一个有效的目录完整路径,则new File(path).listFiles()将执行此列表。在实现作用域存储后,Android 10 files api将不再有用,您可以将其用于GetFileDir、GetExternalFileDir和GetExternalFileDir。看起来您的第二个位置也包括在内。请检查更新的帖子@blackapps“我正在设置legacyExternalStorage=false,启用了作用域存储”--然后您不应该在Android 10+上具有文件系统级访问这些位置的权限。“1.需要使用SAF访问”--正确。“2.无法访问”--在Android 10上,SAF仍然可以选择该选项,但在Android 11上,您将无法访问该选项。
    File[] files = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).listFiles();
    Log.i(getClass().getName(), "fileList = " + Arrays.toString(files));