如何使用 ActivityResultContracts.CreateDocument() 添加意图类型

Posted

技术标签:

【中文标题】如何使用 ActivityResultContracts.CreateDocument() 添加意图类型【英文标题】:How to add intent type by using ActivityResultContracts.CreateDocument() 【发布时间】:2021-10-23 05:04:29 【问题描述】:

我正在使用以下代码在外部存储上创建文件

        Intent(Intent.ACTION_CREATE_DOCUMENT).apply 
        addCategory(Intent.CATEGORY_OPENABLE)
        type = "audio/*"
        putExtra(Intent.EXTRA_TITLE, fileName)
    .also 
        startActivityForResult(it, CREATE_FILE)
    

由于不推荐使用 startActivityForResult,我正在使用 ActivityResultContracts.CreateDocument()。但是我无法添加上面代码中显示为 type = "audio/*"

的意图类型

这是我的代码;

       val createFileIntent =
        registerForActivityResult(ActivityResultContracts.CreateDocument())  uri ->
            // todo
        
      
       // usage
       createFileIntent.launch(fileName)

如何添加意图类型?

【问题讨论】:

【参考方案1】:

根据ActivityResultContracts.CreateDocument的文档,可以继承该类来自定义Intent,例如:

  class CreateSpecificTypeDocument(private val type: String) :
        ActivityResultContracts.CreateDocument() 
        override fun createIntent(context: Context, input: String): Intent 
            return super.createIntent(context, input).setType(type)
        
    

然后将其注册为活动结果:

 registerForActivityResult(CreateSpecificTypeDocument("audio/*")) 
  // todo
 

【讨论】:

以上是关于如何使用 ActivityResultContracts.CreateDocument() 添加意图类型的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?