- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个自定义 ActivityResultContract 来请求具有自定义响应的粗略和精细位置。
class LocationPermission : ActivityResultContract<Void?, LocationPermissionResult>() {
override fun createIntent(context: Context, input: Array<String>): Intent {
val requestPermissions = arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
return Intent(ActivityResultContracts.RequestMultiplePermissions.ACTION_REQUEST_PERMISSIONS)
.putExtra(ActivityResultContracts.RequestMultiplePermissions.EXTRA_PERMISSIONS, requestPermissions)
}
...
}
从 Activity 中调用它:
private val reportLocationIntent = registerForActivityResult(LocationPermission()) { result ->
}
...reportLocationIntent.launch()
然而,这样做时永远不会调用 createIntent。我做错了什么?
最佳答案
您的相关代码存在编译错误,但这种方法似乎有效。我真的不知道问题的“自定义响应”应该是什么,所以我根据您的问题创建了一个名为 class LocationPermissionResult(val granted: Boolean)
的类。它主要是从 ActivityResultContracts 的 RequestMultiplePermissions
编译而来。
在API 30和API 33模拟器上测试,权限对话框打开,返回结果也是正确的。 (确保权限已添加到 AndroidManifest.xml)
这是源代码:
class LocationPermission : ActivityResultContract<Void?, LocationPermissionResult>() {
private val permissions = arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
override fun createIntent(context: Context, input: Void?): Intent {
return Intent(ActivityResultContracts.RequestMultiplePermissions.ACTION_REQUEST_PERMISSIONS).putExtra(
ActivityResultContracts.RequestMultiplePermissions.EXTRA_PERMISSIONS, permissions)
}
override fun getSynchronousResult(context: Context,
input: Void?): SynchronousResult<LocationPermissionResult>? {
val allGranted = permissions.all { permission ->
ContextCompat.checkSelfPermission(
context,
permission
) == PackageManager.PERMISSION_GRANTED
}
return if (allGranted) {
SynchronousResult(LocationPermissionResult(true))
} else null
}
override fun parseResult(resultCode: Int, intent: Intent?): LocationPermissionResult {
if (resultCode != Activity.RESULT_OK) return LocationPermissionResult(false)
if (intent == null) return LocationPermissionResult(false)
val grantResults = intent.getIntArrayExtra(
ActivityResultContracts.RequestMultiplePermissions.EXTRA_PERMISSION_GRANT_RESULTS)
return LocationPermissionResult(grantResults?.all { it == PackageManager.PERMISSION_GRANTED } == true)
}
}
class LocationPermissionResult(val granted: Boolean)
关于android - 创建自定义 ActivityResultContract 以请求位置权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73913965/
在 androidx.activity 版本 1.2.0-alpha05 中,TakePicture 合约的 API 已更改: The TakePicture contract now returns
我可以找到很多答案,such as this one ,关于如何使用 Java 和旧版 API 创建让用户在相机和画廊之间进行选择的 Intent 。 然而,虽然它是 relatively simpl
我可以找到很多答案,such as this one ,关于如何使用 Java 和旧版 API 创建让用户在相机和画廊之间进行选择的 Intent 。 然而,虽然它是 relatively simpl
我想创建一个自定义 ActivityResultContract 来请求具有自定义响应的粗略和精细位置。 class LocationPermission : ActivityResultContra
使用 androids 新的 Activity 结果 API 时,回调只为我触发一次。 class MyFragment : Fragment() { private val intentLau
根据this documentation from Google about launching an activity to get a result : While the underlying
在 Fragment 中,我尝试从相机中捕获图像并使用它。我想用 ActivityResultContracts.TakePicture()但是当我在捕获后尝试使用此图像时,我得到: W/ImageV
新registerForActivityResult方法使得请求权限变得非常简单,如下所示: registerForActivityResult(ActivityResultContracts.Req
截至1.2.0-beta01的 androidx.activity:activity-ktx ,不能再launch使用 Activity.registerForActivityResult() 创建的
我是一名优秀的程序员,十分优秀!