繁体   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