Page Summary
-
AutoResolveHelper is a helper class to resolve Tasks that may require showing UI before returning a result.
-
By calling
resolveTask, the helper will handle necessary UI and return the result to your activity'sonActivityResult. -
This helper is useful for Google Play Services APIs that might need user interaction before providing results, provided the API's results implement
AutoResolvableResult. -
You can retrieve the result, a cancellation signal, or an error status within your
onActivityResultmethod based on theresultCode. -
The
resolveTaskmethod is deprecated and should be replaced with contracts inTaskResultContracts.
This class is deprecated.
Use one of the contracts in TaskResultContracts
as a replacement for this API. These contracts conform to the new Activity Result APIs
introduced in AndroidX, and lets you obtain results from tasks that require intent-based
resolution.
Helper to auto resolve Task
s that may throw ResolvableApiException
to request UI being shown before returning the result.
By calling resolveTask(Task, Activity, int)
with your task, this helper will
make sure that it shows any UI if necessary and at the end will return the result back to
your activity's Activity.onActivityResult(int, int, Intent)
.
This is useful for handling Google Play Services APIs that may have to show UI to the user
before returning their results back. Note that only APIs whose results implement the AutoResolvableResult
are compatible with this helper.
Below is an example of an hypothetical loadFoo
API that returns a FooResult
but that may require the user to consent to sharing the resultData in FooResult
the first time before returning it to you.
public static class SampleActivity extends Activity {
private static final int REQUEST_CODE_FOO = 1234;
@Override
public onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
// Loading Foo
FooClient fooClient = Foo.getFooClient(...);
Task fooTask = fooClient.loadFoo();
// Asking AutoResolveHelper to take care of resolving
// any ResolvableApiExceptions, showing UI if necessary
// and just piping FooResult to onActivityResult.
AutoResolveHelper.resolveTask(fooTask, this, REQUEST_CODE_FOO);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent resultData) {
switch (requestCode) {
case REQUEST_CODE_FOO:
if (resultCode == Activity.RESULT_OK) {
FooResult fooResult = FooResult.getFromIntent(resultData);
// Result loaded, use it ...
} else if (resultCode == Activity.RESULT_CANCELLED) {
// user cancelled ...
} else if (resultCode == AutoResolveHelper.RESULT_ERROR) {
// there was an error, handle it or ignore ...
int errorCode = AutoResolvableHelper.getStatusFromIntent(resultData);
// handle the error, log, ...
}
break;
default:
super.onActivityResult(requestCode, resultCode, resultData);
}
}
}
- Notes from the example above:
- You will receive a response back with
requestCodematching the one you originally passed in the call toresolveTask(Task, Activity, int). - You will receive
resultCodeequal toActivity.RESULT_OKwhen the call has been successful and you should be able to retrieve the actual result object from theresultDataparam. By convention result classes that can be used with this helper should have agetFromIntent(Intent)method that you can use to retrieve the result object. - You will receive
resultCodeequal toActivity.RESULT_CANCELEDwhen the user has cancelled the UI that this helper has shown. - You will receive
resultCodeequal toRESULT_ERRORwhen an error occurs resolving the result of the givenTask. In that case, you may callgetStatusFromIntent(Intent)passingresultDataparam to get theStatuswith the details about the error.
Constant Summary
| int | RESULT_ERROR | The result code that an Activity
passed to resolveTask
will receive in case an error happened. |
Public Method Summary
| static Status | |
| static void |
Inherited Method Summary
Constants
public static final int RESULT_ERROR
The result code that an Activity
passed to resolveTask
will receive in case an error happened.
You can use getStatusFromIntent(Intent)
to retrieve the actual Status
for the error.
Public Methods
public static Status getStatusFromIntent ( Intent data)
Returns the Status
from the Intent
received in Activity.onActivityResult(int, int, Intent)
.
This method is expected to be called from Activity.onActivityResult(int, int, Intent)
of activities passed to resolveTask
.
Note this method will return null if resultCode
was not set to RESULT_ERROR
.

