1

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

  1. 在内部存储 -> /storage/emulated/0/Test/.images
  2. 在 sdcard -> /storage/sdcard1/Android/data/com.app.test/files/Test/.images

在 Android 10 上运行的红米 K20pro 中,无论范围存储如何,都会在 .listFiles 上返回 ArrayList。

但是,在 Android 10 上运行的诺基亚 6.1 如果启用了范围存储,则返回 null 并在启用范围存储时返回 null

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

4

2 回答 2

1

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

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

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

在此文件中,android:requestLegacyExternalStorage="true"在您的<application>标签下添加标志。

向您的用户请求 READ_EXTERNAL_STORAGE 权限:

int PERMISSION_REQUEST = 1;

if (ActivityCompat.checkSelfPermission(this, 
    android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    String[] PERMISSIONS = {android.Manifest.permission.READ_EXTERNAL_STORAGE};
    ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_REQUEST);
}

(可选)处理请求的结果:

@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));
于 2020-11-26T15:45:59.857 回答
0

可能有点晚了,但是这两个网站帮助了我:

开发者隐私存储

开发人员管理所有文件

您必须单独向用户请求权限才能访问它,就像使用 Android 9 及更低版本一样。

希望它有所帮助。

于 2021-07-22T12:26:59.737 回答