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

s-h*_*ter 10 storage android file android-external-storage

在 Android 11 中,随着作用域存储强制执行requestLegacyExternalStorage标志将不再适用于访问外部存储中的文件。和

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)

在清单文件中声明,以及用户在运行时授予的此权限,以下代码曾经能够读取该文件,但在 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()
}
Run Code Online (Sandbox Code Playgroud)

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

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

Gop*_*ddy 0

在请求之前使用它

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

要得到。

        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));
Run Code Online (Sandbox Code Playgroud)