如何在 Android 11 中阅读外部文档?

How to read external documents in Android 11?

提问人:s-hunter 提问时间:3/22/2020 更新时间:8/16/2022 访问量:7230

问:

在 Android 11 中,强制实施范围内存储后,requestLegacyExternalStorage 标志将不再适用于访问外部存储中的文件。跟

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

在清单文件中声明,以及用户在运行时授予的此权限,以下代码曾经能够读取该文件,但在 Android 11 中无法读取。文件位于/sdcard/Documents/my_confi_file.json

try {
    var fileContent = ""
    val file = File("/sdcard/Documents/my_confi_file.json")
    val fileInputStream = FileInputStream(file)
    val size = fileInputStream.available()
    val buffer = ByteArray(size)
    fileInputStream.read(buffer)
    fileContent = String(buffer, Charset.forName("UTF-8"))
    fileInputStream.close()
} catch (e: IOException) {
    e.printStackTrace()
}

在 Android 11 中,是否仍然可以从此目录(/sdcard/Documents/)读取文件以及如何操作?

用例是设备和应用程序不是公开的,并且没有用户隐私问题。设备和应用的所有者希望将文件上传到设备中的此目录 (/sdcard/Documents/),应用将从此文件中读取内容。

Android 文件 存储 android-external-storage

评论

0赞 Morrison Chang 3/22/2020
相关新闻: github.com/android/storage-samples
1赞 Thoriya Prahalad 2/25/2021
阅读: stackoverflow.com/a/66366102/9917404

答:

0赞 Gopal Reddy 8/16/2022 #1

在请求之前使用它

Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                        Uri uri = Uri.fromParts("package", getPackageName(), null);
                        intent.setData(uri);
                        startActivity(intent);

得到。

        File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+"/FolderName/"+new_filename+"/");
        File[] allfiles = null;
        allfiles = file.listFiles();

        Log.i(TAG, String.valueOf(allfiles.length));