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

How to add intent type by using ActivityResultContracts.CreateDocument()

我正在使用下面的代码在外部存储上创建一个文件

        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)

如何添加意向类型?

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

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

然后为activity注册结果:

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