如何在Android上使用Intent获取文件夹路径

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

获取我使用的文件路径:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE); 

Intent.ACTION_GET_CONTENT 不允许选择文件夹。 但如何获取文件夹/目录路径呢?

API 级别 19。

有没有办法在没有第三方库的情况下做到这一点?

java android
4个回答
3
投票

获取我使用的文件

该代码与文件关系不大。内容!=文件。

但是如何获取文件夹/目录呢?

为此构建您自己的 UI。或者,使用第三方目录选择器库

有没有办法在没有第三方库的情况下做到这一点?

没有平台定义的

Intent
用于选择文件系统目录。
ACTION_OPEN_DOCUMENT_TREE
将让用户在Android 5.1+上选择文档树,但文档树不一定是文件系统目录,就像
ACTION_GET_CONTENT
ACTION_OPEN_DOCUMENT
不一定涉及文件一样。


0
投票

首先在您的活动类中创建常量:

private static final int PICKFILE_REQUEST_CODE = 100;

当您需要选择文件夹时,请使用如下意图:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, PICKFILE_REQUEST_CODE);

用户选择文件夹后,您将得到结果

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PICKFILE_REQUEST_CODE) {
    String folderPath = data.getDataString();
        //TODO
        return;
    }
    super.onActivityResult(requestCode, resultCode, data);

0
投票

要选择任何文件夹,你可以使用这个

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("file/*");
  startActivityForResult(intent,PICKFILE_RESULT_CODE);

获取文件后,其详细信息显示为

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

String FilePath = data.getData().getPath();
String FileName = data.getData().getLastPathSegment();
int lastPos = FilePath.length() - FileName.length();
String Folder = FilePath.substring(0, lastPos);

textFile.setText("Full Path: \n" + FilePath + "\n");
textFolder.setText("Folder: \n" + Folder + "\n");
textFileName.setText("File Name: \n" + FileName + "\n"); }

这是一个示例,希望您可以清楚地了解如何做到这一点: http://android-er.blogspot.com/2011/04/more-for-pick-file-using.html


0
投票

如果您只想获取共享访问存储中特定文件夹的路径。 处理 EXTERNAL_STORAGE 的读取权限后。

private ActivityResultLauncher<Intent> launchActivityForResult;
private  FileBrowserActivityBinding binding;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = FileBrowserActivityBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());

    launchActivityForResult = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            result -> {
                if (result.getResultCode() == RESULT_OK) {
                    Intent data = result.getData();
                    System.out.println("Path ********** " + data.getData().getEncodedPath());
                } else {
                }
            });
    binding.browseFileBtn.setOnClickListener(v -> {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE_STORAGE_ACCESS);
        } else {
            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
            launchActivityForResult.launch(intent);
        }
    }); 
} 

不要忘记向 androidManifest 文件添加权限

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