androidx 中已弃用的 OnActivityResult()

Pre*_*ari 6 android deprecated onactivityresult startactivityforresult androidx

OnActivityResult()在 androidx 中已弃用。我参考了以下链接 https://developer.android.com/training/basics/intents/result https://developer.android.com/jetpack/androidx/releases/activity https://proandroiddev.com/is- onactivityresult-deprecated-in-activity-results-api-lets-deep-dive-into-it-302d5cf6edd 我在我的项目中实现了注册事情..like .我通过注册活动来创建 resultcontract 代替startActivityForResult i 替换 resultcontract.launch(intent)并获得结果resultcontract (按照上面的链接)。现在我怀疑打开 gps 的功能。为此,我们使用了

 val rae = e as ResolvableApiException
    rae.startResolutionForResult(context, GPS_REQUEST)
Run Code Online (Sandbox Code Playgroud)

早些时候 startActivityForResult,现在 startResolutionForResult 对如何获得 gps 请求的结果感到困惑(在代码中,我们在 onActivityResult 中获得结果)。我该如何使用新方法实现这一点?

Gus*_*oss 17

我找到了这个问题的解决方案,使用最近的 API 来启动一些结果。

因此,您几乎可以从 ResolvableApiException 中获得解决方案,它是一个 PendingIntent,并以 StartIntentSenderForResult 合同启动它,就像这样

合同:

private val resolutionForResult =
        registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { activityResult ->
            //do whatever you want with activity result...
        }
Run Code Online (Sandbox Code Playgroud)

如何开始:

.addOnFailureListener { exception ->
    if (exception is ResolvableApiException) {
        try {
            val intentSenderRequest =
                IntentSenderRequest.Builder(exception.resolution).build()
            resolutionForResult.launch(intentSenderRequest)
        } catch (throwable: Throwable) {
            // Ignore the error.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)