首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >registerForActivityResult可以在协程中使用吗?

registerForActivityResult可以在协程中使用吗?
EN

Stack Overflow用户
提问于 2020-12-13 23:15:54
回答 1查看 389关注 0票数 3

在我看来,这样做的问题是您必须保证在您自己的活动的OnCreate()完成之前调用registerForActivityResult()。OnCreate()显然不是一个挂起的函数,所以我不能将registerForActivityResult()和ActivityResultLauncher.launch()包装在suspendCoroutine{}中以等待回调,因为我不能从OnCreate启动suspendCoroutine并等待它完成,然后让OnCreate完成...

...which我确实认为我可以使用runBlocking{},但我发现在OnCreate中调用runBlocking会导致应用程序永远挂起,而不会运行runBlocking{}块中的代码。

所以我的问题是,runBlocking{}是否是正确的答案,但我使用它是错误的,或者是否有其他方法可以在协程中使用registerForActivityResult(),或者根本不可能。

EN

回答 1

Stack Overflow用户

发布于 2021-06-23 20:23:02

你可以做这样的事情。请参考下面的实现。

代码语言:javascript
复制
class RequestPermission(activity: ComponentActivity) {
    private var requestPermissionContinuation: CancellableContinuation<Boolean>? = null
    @SuppressLint("MissingPermission")
    private val requestFineLocationPermissionLauncher =
        activity.registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
            requestPermissionContinuation?.resumeWith(Result.success(isGranted))
        }

    suspend operator fun invoke(permission: String) = suspendCancellableCoroutine<Boolean> { continuation ->
        requestPermissionContinuation = continuation
        requestFineLocationPermissionLauncher.launch(permission)
        continuation.invokeOnCancellation {
            requestPermissionContinuation = null
        }
    }
}

确保在活动的onStart之前初始化这个类。在activity的onStart之前调用registerForActivityResult接口。请参考下面的示例

代码语言:javascript
复制
class SampleActivity : AppCompatActivity()  {
    val requestPermission: RequestPermission = RequestPermission(this)

    override fun onResume() {
        super.onResume()
        lifecycleScope.launch {
            val isGranted = requestPermission(Manifest.permission.ACCESS_FINE_LOCATION)
            //Do your actions here
        }

    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65277180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档