listFiles()在Android 10(作用域存储)中没有任何用处。需要特定目录的文件
我已经实现了范围存储&需要列出来自第三方应用程序的JPEG文件让我们命名它为Test app,它在以下两个路径中创建“Test”文件夹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 但是,在
请帮助我从这两个文件夹中提取文件。我在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));