ActivityResultContracts这个有什么用
时间: 2024-09-27 14:08:54 浏览: 17
ActivityResultContracts 是Android 11引入的一个新API,它简化了Activity请求权限的过程,替代了传统的`startActivityForResult()`方法。在之前的版本中,当应用请求用户权限时,会启动一个新的Activity并返回一个结果。但在Android 11及以上版本,为了改进隐私保护,不再允许直接从非系统组件(如Fragment)启动Activity。
ActivityResultContracts 提供了一个更现代的方法来管理这些权限请求,比如`RequestPermission()`接口。当你调用`registerForActivityResult()`并传入`ActivityResultContracts.RequestPermission()`时,你可以定义一个回调函数`block(result)`,该函数会在用户同意或拒绝权限后执行。这样做的好处是代码更加简洁,避免了显式地处理ActivityResult,同时也更好地符合了Android的新设计原则。
例如,在官方文档中展示了如何使用`ActivityResultContracts`的示例[^1]:
```kotlin
inline fun SupportFragment.requestPermission(crossinline block: (Boolean) -> Unit): ActivityResultLauncher<String> {
return registerForActivityResult(ActivityResultContracts.RequestPermission()) { result ->
block(result)
}
}
```
在这个片段中,`SupportFragment`上的`requestPermission()`方法注册了一个`ActivityResultLauncher`,并在用户做出响应后立即执行`block`里的逻辑。