簡體   English   中英

如何從 android 中的意圖打開目錄?

[英]How to open a directory from intent in android?

我試圖借助向用戶顯示該文件夾內的內容的意圖打開一個目錄,但我無法這樣做,但我不知道為什么該文件夾不會打開,我得到了這個“無法使用此文件夾”在文件管理器中。

在此處輸入圖像描述

               open.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + "/" + "XYZ";
                Uri uri = Uri.parse(path);
                Toast.makeText(MainActivity.this, ""+path, Toast.LENGTH_SHORT).show();

                openDirectory(uri);

            }
        });

方法

public void openDirectory(Uri uriToLoad){
        // Choose a directory using the system's file picker.
        int result = 1;

        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);

        // Optionally, specify a URI for the directory that should be opened in
        // the system file picker when it loads.
        intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, uriToLoad);

        startActivityForResult(intent, result);
    }

我想在點擊按鈕后打開文件夾 XYZ

我正在嘗試借助向用戶顯示該文件夾內的內容的意圖打開一個目錄

抱歉,沒有標准的Intent操作。 您的代碼試圖讓用戶 select 成為文檔樹。

它也這樣做不正確,因為EXTRA_INITIAL_URI沒有將file:// Uri作為值。 這需要是您之前從存儲訪問框架獲得的一些Uri ,例如通過一些過去的ACTION_OPEN_DOCUMENT_TREE請求。

我不知道為什么文件夾打不開,我在文件管理器上看到“無法使用這個文件夾”

從 Android 的角度來看,您的EXTRA_INITIAL_URI值比隨機字符串好一點。

但用戶不會知道 XYZ 文件夾的實際位置

那么也許你應該讓用戶首先選擇位置,而不是強制一個特定的位置。 例如,您可以使用ACTION_CREATE_DOCUMENT讓用戶決定將文檔放在用戶設備上的哪個位置(或用戶的雲存儲、用戶的網絡文件服務器等)。

據我所知,使用 Intent 您可以瀏覽、打開和創建文件,這些文件由系統為所有應用程序共享。 在這種情況下,要打開獲取文件路徑,您可以使用如下代碼(請原諒我的 Kotlin):

private var launcherForResult =
    registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        if (result.resultCode == Activity.RESULT_OK) {
            result.data.also { uri -> filePath = uri.toString() }
        }
    }

private fun getFilePath() {
    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
        type = "*/*"
        addCategory(Intent.CATEGORY_OPENABLE)
    }
    launcherForResult.launch(intent)
}

至於目錄,它通常會打開之前打開的最后一個目錄。

如果您不希望其他應用程序看到您的文件,請將它們存儲在應用程序的私有目錄中

暫無
暫無

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

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