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

17
在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/),并且应用程序将从该文件中读取内容。


相关链接:https://github.com/android/storage-samples - Morrison Chang
1
阅读此内容:https://dev59.com/BVIG5IYBdhLWcg3w01A9#66366102 - Thoriya Prahalad
1个回答

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);

获取。

        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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接