0

我最近在我的应用程序中更新了不推荐使用的方法,其中有一个我有几个问题。没有找到任何描述我的用例的示例或解释......有本地备份和恢复功能。用户必须选择一个目录来保存数据或从中恢复数据。它是这样实现的:

binding.backupBtn.setOnClikListener{
   openDirectory(LOCAL_BACKUP_CODE)
}
binding.restoreBtn.setOnClickListener{
   openDirectory(LOCAL_RESTORE_CODE)
}

private fun openDirectory(requestCode: Int){
   val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
   startActivityForResult(intent, requestCode)
}

然后根据请求代码备份或恢复:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode = Activity.RESULT_OK) {
           val uriTree = data?.data ?: return
           if (requestCode == LOCAL_BACKUP_CODE) {
               localBackup(uriTree)
           }
           if (requestCode == LOCAL_RESTORE_CODE) {
               localRestore(uriTree)
    }
  }
}

现在有了这个活动结果合同,我如何指定自定义请求代码,是否有可能。访问目录的 Android 文档仍然使用startActivityForResult()

关联

ActivityResultContract.StartActivityForResult() - 是一个通用合约,它接受任何 Intent 但无法提供自定义请求代码。

至于现在,我只是创建了 2 个用于备份和恢复的启动器:

        val backupRequest = registerForActivityResult(ActivityResultContracts.OpenDocumentTree()){
            if (it != null){
                localBackup(it)
            }
        }

        val restoreRequest = registerForActivityResult(ActivityResultContracts.OpenDocumentTree()){
            if (it != null){
                localRestore(it)
            }
        }

        binding.backupBtn.setOnClickListener {
            backupRequest.launch(null)
        }

        binding.restoreBtn.setOnClickListener {
            restoreRequest.launch(null)
        }

这是这样做的方法吗?我查看了自定义合同,但不知道如何返回 Uri 和自定义变量(在这种情况下为请求代码)。

4

0 回答 0