Android 调用系统文件管理器

目录

调用系统文件管理器

1.单选模式

2.多选模式

3.选择文件夹模式


调用系统文件管理器

可以使用registerForActivityResult()调用系统文件管理器

1.单选模式

通过 new ActivityResultContracts.OpenDocument() 进行单文件选择模式

代码如下(示例):

// 调用系统文件管理器
String[] types = {"image/*"};
registerForActivityResult(new ActivityResultContracts.OpenDocument(), result -> {
    if (result == null) {
        Toast.makeText(this, "无法获取文件", Toast.LENGTH_SHORT).show();
        return;
    }

    // ....其他操作

}).launch(types);

 其中types是限定文件类型,当然launch()还有其他用法。

2.多选模式

通过 new ActivityResultContracts.OpenMultipleDocuments() 进行多文件选择模式

代码如下(示例):

String[] types = {"image/*"};
registerForActivityResult(new ActivityResultContracts.OpenMultipleDocuments(), result -> {
    if (result == null) {
        Toast.makeText(this, "无法获取文件", Toast.LENGTH_SHORT).show();
        return;
    }
    // ...其他操作

}).launch(types);

3.选择文件夹模式

通过 new ActivityResultContracts.OpenDocumentTree() 进行文件夹选择模式,并使用DocumentFile获取文件夹下的所有文件

下面展示的是选择文件夹,并获取文件夹所有文件的例子,代码如下(示例):

registerForActivityResult(new ActivityResultContracts.OpenDocumentTree(), result -> {
    if (result == null) {
        return;
    }

    // 使用DocumentFile.fromTreeUri获取指定目录下的文件
    DocumentFile documentFile = DocumentFile.fromTreeUri(this, result);
    if (documentFile == null) {    
        return;
    }
    // 获取文件列表
    DocumentFile[] listFiles = documentFile.listFiles();
    // 将DocumentFile[]数组转换成Uri集合
    List<Uri> uriList = docFilesToUriList(listFiles);

    // ...其他操作

}).launch(null);

将DecumentFile数组转成Uri集合

/**
 * 将DocumentFile[]数组转换成Uri集合
 *
 * @param listFiles DocumentFile数组
 * @return
 */
public List<Uri> docFilesToUriList(DocumentFile[] listFiles) {
    List<Uri> uriList = new ArrayList<>();
    for (DocumentFile docFile : listFiles) {
        if (docFile == null) {
            continue;
        }

        uriList.add(docFile.getUri());
    }

    return uriList;
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值