当前位置: 首页 > 知识库问答 >
问题:

在AndroidQ中重新安装应用程序后,我们是否需要获得应用程序自创建的所有文件?

韦阳晖
2023-03-14

用例:

public static ArrayList<FileModel> getExternalPDFFileList(Context context) {
    ArrayList<FileModel> uriList = new ArrayList<>();
    try {
        ContentResolver cr = context.getContentResolver();

        String[] projection = {MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.DISPLAY_NAME};
        String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
                + MediaStore.Files.FileColumns.MEDIA_TYPE;
        String[] selectionArgs = null;
        String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE + "=?";
        String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf");
        String[] selectionArgsPdf = new String[]{mimeType};

        String sortOrder = android.provider.MediaStore.Files.FileColumns.DATE_TAKEN + " DESC";
        Cursor cursor = cr.query(extUri, projection, selectionMimeType, selectionArgsPdf, sortOrder + " DESC");

        assert cursor != null;
        for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
            int columnIndex = cursor.getColumnIndex(projection[0]);
            long fileId = cursor.getLong(columnIndex);
            Uri fileUri = Uri.parse(extUri.toString() + "/" + fileId);
            String displayName = cursor.getString(cursor.getColumnIndex(projection[1]));
            uriList.add(new FileModel(displayName, fileUri));
        }
        cursor.close();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return uriList;
}

注意:在android Q之前,一旦权限启用,我们就可以获取外置存储的所有文件。但是在Android SDK-28之后,有了完全不同的文件系统。由于缺乏适当的文件,很难做小任务。

共有1个答案

爱唯
2023-03-14

当应用程序重新安装后,我们需要权限才能读取自创建的文件吗?

问题错了。

如果你卸载你的应用程序,然后重新安装它,它被认为是一个不同的应用程序。

因此,您的应用程序无法“看到”媒体存储中的文件,这些文件是由卸载的应用程序创建的。

由于没有权限,您什么也不能做。

 类似资料:
  • 我对React Native是新手,首先,它是使用JSX构建跨平台应用程序的最佳框架。 很少有问题让我感到刺痛: null

  • 当我开始创建一个新的react应用程序,并运行-npx create react app my app时,我看到在安装reactor其他模块后,它正在删除所有文件夹。下面是cmd中的代码详细信息 。。。├─ 反应-scripts@3.0.0 └─ react@16.8.6完成于422.17秒。错误:EPERM:不允许操作,打开“C:\Users\lenovo”。yarnrc' 正在中止安装。yar

  • 我们在一个Java文件中编写一个代码,使用Gradle我们可以编译Java文件和资源文件,并制作一个APK,所以这里有一个疑问,为什么我们需要android SDK?

  • 下午5点左右,我在两部手机上(运行版本A的phone1和运行版本B的phone2)都正确地收到了通知。下午6点左右,我只在一部手机(版本B)上收到通知,而在另一部手机(版本A)上没有。我登录了手机,查看了app store,更新了版本A->B,所以现在两部手机都有了B版本。 phone1仍然没有通知,但phone2有。然后我卸载了phone2上的应用程序,重新安装。现在,在晚上8点左右,两部手机都

  • 运行appium程序时出现异常。请询问是否需要额外的信息。 TLDR: 原始错误:重新安装时需要“应用”选项 log4j:WARN找不到记录器(org.apache.http.client.protocol.RequestAddCookies)的追加器。log4j:警告请正确初始化log4j系统。log4j:请参阅http://logging.apache.org/log4j/1.2/faq.ht

  • 问题内容: 我有一个使用此函数运行线程的代码示例。我们为什么以及何时需要使用它? 编辑 怎么样来使用类,什么是和? 问题答案: 当您要从非UI线程更新UI时必须使用。例如-如果您想从后台线程更新UI。您也可以将其用于同一件事。 从文档- 在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则将操作发布到UI线程的事件队列。 句法 - 更新- 如果您要执行