如何像PendingResult.await一样同步运行新的gms Task对象?



我在com.google.android.gms.tasks.Task上看不到任何await同步 api。我错过了什么吗?我正在尝试迁移以使用 Play 服务中的新 *客户端类。我已经将我的代码设计为在另一个线程中运行并使用PendingResult.await.我的代码是这样的:

val pendingResult = Auth.GoogleSignInApi.silentSignIn(TwinkleApplication.instance.gapiClient)
val account = pendingResult.await(10, TimeUnit.SECONDS)

我想使用它,但不知道如何继续。

val signin = GoogleSignIn.getClient(ctx, Global.getGSO())
val task = signin.silentSignIn()

Tasks类包含一个静态await方法 - 在 Java 中我正在这样做:

GoogleSignInClient googleSignInClient = GoogleSignIn.getClient(context, gso);
Task<GoogleSignInAccount> task = googleSignInClient.silentSignIn();
try {
GoogleSignInAccount account = Tasks.await(task);
...
} catch (ExecutionException e) {
// task failed
} catch (InterruptedException e) {
// an interrupt occurred while waiting for the task to finish
}
@SuppressLint("MissingPermission")
suspend fun fetchLastLocation(): Location? {
Log.e("location", "fetchLastLocation: 1")
var location: Location? = null
try {
val task = providerClient.lastLocation.apply {
Log.e("location", "fetchLastLocation: 2")
addOnFailureListener {
viewAction.value = ViewAction.OnError(it)
}
addOnSuccessListener {
Log.e("location", "fetchLastLocation: 3")
viewAction.value = ViewAction.OnLocationFetched(it)
Log.e("location", "fetchLastLocation: 4")
location = it
}
}
withContext(Dispatchers.IO) {
Tasks.await(task)
}
} catch (unlikely: SecurityException) {
viewAction.value = ViewAction.OnError(unlikely)
}
Log.e("location", "fetchLastLocation: 5")
return location
}

尝试在协程中使用它

相关内容

最新更新