首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >abe无法访问由其他应用程序创建的外部存储中的文件

abe无法访问由其他应用程序创建的外部存储中的文件
EN

Stack Overflow用户
提问于 2021-11-14 13:00:25
回答 1查看 34关注 0票数 0

我正在尝试读取由我的应用程序(应用程序A)创建的Documents文件夹中的目录,由我的应用程序创建的文件(例如。文件名: abc.json)我可以阅读它,但如果我创建了另一个文件,比如xyz.json by other app,让我们说文件资源管理器,那么我就不能阅读它。

我在android 11中使用Medistore方法读取文件,我应该怎么做?

我用来执行读取的代码:

代码语言:javascript
复制
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        if (Environment.isExternalStorageManager()==false) {

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


        }
    }


    try{
        Uri contentUri = MediaStore.Files.getContentUri("external");
        String selection = MediaStore.MediaColumns.RELATIVE_PATH + "=?";
        String[] selectionArgs = new String[]{Environment.DIRECTORY_DOCUMENTS + "/"+folderName+"/"};

        Cursor cursor =context.getContentResolver().query(contentUri, null, selection, selectionArgs, null);

        Uri uri = null;

        if (cursor.getCount() == 0) {
            Toast.makeText(context, "No file found in \"" + Environment.DIRECTORY_DOCUMENTS + "/"+folderName+"\""+cursor.getCount(), Toast.LENGTH_LONG).show();
        } else {
            while (cursor.moveToNext()) {
                int filenameTemp=cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME);
                String fileName = cursor.getString(filenameTemp);

                if (fileName.equals(readFileName)) {
                    int idTemp=cursor.getColumnIndex(MediaStore.MediaColumns._ID);
                    long id = cursor.getLong(idTemp);

                    uri = ContentUris.withAppendedId(contentUri, id);

                    break;
                }
            }

            if (uri == null) {
                Toast.makeText(context, "\""+readFileName+"\" not found", Toast.LENGTH_SHORT).show();
            } else {
                try {
                    InputStream inputStream = context.getContentResolver().openInputStream(uri);

                    int size = inputStream.available();

                    byte[] bytes = new byte[size];

                    inputStream.read(bytes);

                    inputStream.close();

                    String jsonString = new String(bytes, StandardCharsets.UTF_8);
                    returnJsonString=jsonString;

                } catch (IOException e) {
                    Toast.makeText(context.getApplicationContext(), "Fail to read file", Toast.LENGTH_SHORT).show();
                }
            }
EN

回答 1

Stack Overflow用户

发布于 2021-11-14 13:18:40

您有两个选择。

在清单中请求MANAGE_EXTERNAL_STORAGE。

让用户使用ACTION_OPEN_DOCUMENT选择文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69963223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档