簡體   English   中英

當我嘗試在 Android 中創建目錄時沒有任何反應

[英]Nothing happens when I try to create directories in Android

在我的應用程序中,我試圖在外部存儲目錄中創建文件夾,但我無法讓它工作。 我的代碼看起來應該可以正常工作(它在創建目錄之前等待存儲權限)。 所有mkdirs()行都運行,但沒有任何反應——甚至沒有錯誤。

這是我的主要代碼(在單獨的線程上運行 - 我嘗試在 UI 線程上運行setupDir()

        while(!(//checks for permissions
                ContextCompat.checkSelfPermission(instance, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
                        && ContextCompat.checkSelfPermission(instance, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
        )){
            try{Thread.sleep(200);}catch(Exception ignored){}
        }

        MigratedFunctions.setupDir();

這是我的 setupDir 方法

public static final String main_folder_name = "Forehead_Temperature_Detector";
public static void setupDir(){//https://stackoverflow.com/questions/24781213/how-to-create-a-folder-in-android-external-storage-directory

    String main_folder = main_folder_name;
    String log_folder = "logs";
    String records_folder = "records";

    File mainFolder = new File(Environment.getExternalStorageDirectory(), main_folder);
    if (!mainFolder.exists()) {
        mainFolder.mkdirs();
    }

    File logFolder = new File(Environment.getExternalStorageDirectory() + "/" + main_folder, log_folder);
    if (!logFolder.exists()) {
        logFolder.mkdirs();
    }

    File recordsFolder = new File(Environment.getExternalStorageDirectory() + "/" + main_folder, records_folder);
    if (!recordsFolder.exists()) {
        recordsFolder.mkdirs();
    }
}

一旦用戶通過設置菜單,以下代碼將在不同的線程上運行(requestPermissions 只是正常請求權限,確切的代碼並不重要 - 重要的是第一個片段中的條件實際上確實得到滿足一旦權限被授予)

        runOnUiThread(()->{
            if(!(//checks and asks for permissions if necessary
                    ContextCompat.checkSelfPermission(instance, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
                            && ContextCompat.checkSelfPermission(instance, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
            )){
                requestPermissions(PermissionHandler.PERMISSIONS_FOR_STORAGE_DISCOVERY,2);//the requestCode is arbitrary (default:2)

            }
        });

據此,如果您使用目標 sdk 29,沒有舊版存儲,應用程序仍然可以使用 getExternalFilesDir() 和類似目錄而無需權限。 但是,外部存儲的 rest 似乎無法通過文件系統 API 訪問。 你既不能讀也不能寫。 這包括其他應用程序創建的文件和用戶放置在設備上的文件(例如,通過 USB 電纜)。

暫無
暫無

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

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