簡體   English   中英

如何管理 Android 11 中的文件和文件夾保持向后兼容性

[英]How to manage files and folder in Android 11 maintaining backwards-compatibility

我需要使我的應用程序與大於 29(Android 11+)的 android 版本兼容。 目前我使用以下代碼創建一個文件夾樹:

   public void createFolder() {
        try {
            ArrayList<File> listDir = new ArrayList<>();
            listDir.add(new File(MAIN_FOLDER));
            listDir.add(new File(CONFIG_FOLDER_ROOT));
            listDir.add(new File(PDF_FOLDER));
            listDir.add(new File(THUMB_FOLDER));
            listDir.add(new File(LOGS_FOLDER));
            listDir.add(new File(ARCHIVE_FOLDER));
            listDir.add(new File(ZOMBIE_FOLDER));
            listDir.add(new File(DATASHEET_FOLDER));

            for (int i = 0; i < listDir.size(); i++) {
                if (!listDir.get(i).exists()) {
                    if (listDir.get(i).mkdirs()) {
                        //Creo il file .incarichi
                        if (listDir.get(i).getName().compareToIgnoreCase(".Data") == 0) {
                            File fileIncarichi = new File(listDir.get(i).getAbsolutePath(), ASSIGNMENT_FILE);
                            if (!fileIncarichi.exists()) {
                                fileIncarichi.createNewFile();
                            }
                        }

                        //Creo il file .warning
                        if (listDir.get(i).getName().compareToIgnoreCase(".Logs") == 0) {
                            File fileIncarichi = new File(listDir.get(i).getAbsolutePath(), WARNING_FILE);
                            if (!fileIncarichi.exists()) {
                                fileIncarichi.createNewFile();
                            }
                            File fileConfig = new File(listDir.get(i).getAbsolutePath(), CONFIG_FILE);
                            if (!fileConfig.exists()) {
                                fileConfig.createNewFile();
                            }
                        }

                        //Creo i file .nomedia
                        File fileMedia = new File(listDir.get(i).getAbsolutePath(), ".nomedia");
                        if (!fileMedia.exists()) {
                            fileMedia.createNewFile();
                        }
                    }
                }
            }
        } catch (Exception e) {
            wil.WriteFile("1)FilesUtilities - Exception: " + e.getMessage());
        }
    }

這些是我傳遞給“newFile()”函數的變量示例:

public final static String MAIN_FOLDER = Environment.getExternalStorageDirectory() + "/.MYAPP";
public final static String THUMB_FOLDER = Environment.getExternalStorageDirectory() + "/.MYAPP/.Thumbs";

為了保持與新的 android 版本的兼容性,我已在清單中插入,現在一切正常:

android:requestLegacyExternalStorage="true"

我通過 Play 商店收到通知,到 5 月 5 日我必須調整我的應用程序以使其符合新政策,所以我開始閱讀如何使應用程序與 android 的所有版本兼容,但我有關於如何進行的一些疑問。

請記住,我無法創建“自定義”文件夾,是否可以直接在公共文件夾(例如“下載,文檔”)中創建我的目錄,或者是否有必要完全更改使用“媒體存儲”創建和訪問文件的程序”或“商店訪問框架”?

以經典方式將文件寫入公共 Documents 文件夾的子目錄。

他們會活下來。

但無法通過經典文件方式訪問(除非您的應用程序具有“所有文件訪問權限”)但使用 SAF。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM