我想访问 Android 13 及以上版本的内部存储中的地图文件

问题描述 投票:0回答:1

我正在开发一个地图应用程序,该应用程序的地图文件不在其资产或原始文件中,而是在用户手机上,例如country.map,所以我如何通过授予正确的权限Media.IMAGES或Media.AUDIO或Media.VIDEO来访问并不代表我的文件。请给我一些解决方案。预先感谢!

我尝试添加所有这些权限,但在我的 Android 智能手机版本 13 中没有任何文件和媒体权限,这些是权限:

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" tools:ignore="ProtectedPermissions" /><uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" tools:ignore="ProtectedPermissions" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /><uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /><uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /><uses-permission android:name="android.permission.READ_MEDIA_FILES" tools:ignore="SystemPermissionTypo" /><uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" tools:ignore="ProtectedPermissions" /><uses-permission android:name="android.permission.MANAGE_MEDIA" tools:ignore="ProtectedPermissions" /><uses-permission android:name="android.permission.CALL_PHONE" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.READ_PHONE_STATE" />

android storage android-permissions android-external-storage file-management
1个回答
0
投票

最后经过大量研究,我找到了解决方案,对于 12 以下的 Android 版本,我们需要添加存储权限,但对于 13 及以上版本,如果您访问自己的文件并由自己生成,则不需要该权限。只需保存并访问您的文件,对于我的地图文件,这是我用于提取到外部存储的代码,

  private void unzip(File zipFile, File destination) throws IOException {
    ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile));
    ZipEntry entry;
    byte[] buffer = new byte[1024];
    int count;

    while ((entry = zis.getNextEntry()) != null) {
        File file;
        if (entry.isDirectory()) {
            file = new File(destination, entry.getName());
            file.mkdirs();
        } else {
            String entryName = entry.getName();
            String folderName = "daero" + File.separator + "maps";
            String relativePath = entryName.substring(entryName.indexOf('/') + 1); // Removing the first directory from the path

            file = new File(destination, folderName + File.separator + relativePath);

            File parentDir = file.getParentFile();
            if (parentDir != null && !parentDir.exists()) {
                parentDir.mkdirs();
            }

            if (file.exists()) {
                file.delete();
            }

            FileOutputStream fos = new FileOutputStream(file);
            BufferedOutputStream bos = new BufferedOutputStream(fos);

            while ((count = zis.read(buffer)) != -1) {
                bos.write(buffer, 0, count);
            }

            bos.flush();
            bos.close();
        }

        zis.closeEntry();
    }

    zis.close();

}
© www.soinside.com 2019 - 2024. All rights reserved.