Вот вспомогательный метод для преобразования Задачи в код состояния.Этот пример метода является блокирующим, но для асинхронного он будет выглядеть аналогично.Try / catch привязывается непосредственно к OnSuccessListener / OnFailureListener.
import static com.google.android.gms.common.api.CommonStatusCodes.ERROR;
import static com.google.android.gms.common.api.CommonStatusCodes.SUCCESS;
import android.support.annotation.CheckResult;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.Tasks;
import java.util.concurrent.ExecutionException;
@CheckResult
public static int waitForTask(String methodName, Task<?> task) {
try {
Tasks.await(task);
return SUCCESS;
} catch (InterruptedException | ExecutionException e) {
if (e instanceof InterruptedException) {
Thread.currentThread().interrupt();
}
Exception taskException = task.getException();
if (taskException instanceof ApiException) {
return ((ApiException) taskException).getStatusCode();
}
return ERROR;
}
}