如何在 Android 10 上直接从外部下载目录读取文件(Q)

2024-03-07

我尝试通过执行以下操作从 Android Q 上的下载文件夹中读取文件:

        File downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
        File f = new File(downloadDir, "some-existing-file");
        if(!f.exists()) {
            throw new IllegalStateException();
        }

        Uri furi = Uri.fromFile(f);
        try {
            ParcelFileDescriptor des = getContentResolver().openFileDescriptor(
                    furi, "r", null);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

我也设置了android:requestLegacyExternalStorage="true"在清单中,并要求WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE运行时权限。

文件存在,但是当尝试打开文件描述符时,出现异常:java.io.FileNotFoundException: open failed: EACCES (Permission denied).

我读了所做的改变 https://developer.android.com/training/data-storage在 Android Q 存储中,但无法弄清楚如何在没有用户交互的情况下读取文件。

Thanks!


从 Android 6 (Marshmallow) 开始,用户应在运行时授予一些关键权限,以便他/她知道您的应用程序可以访问哪些内容。
this link https://stackoverflow.com/a/34722591/8136868就是你所需要的

EDIT
将这些添加到清单中

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


然后将此代码添加到您的 oncreate 方法中

if (android.os.Build.VERSION.SDK_INT >= 23 && (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
                PackageManager.PERMISSION_GRANTED)) {
            ActivityCompat.requestPermissions(
                    this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    2000);
        }


这将向用户弹出一个对话框以同意权限。如果用户同意onRequestPermissionsResult方法将被调用,因此覆盖onRequestPermissionsResult像这样

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && requestCode == 2000) {
        //do what you want with files
    }
}


请注意,我将请求代码设置为 2000。它是可选的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android 10 上直接从外部下载目录读取文件(Q) 的相关文章

随机推荐