Qin*_*ing 4 android android-fragments google-smartlockpasswords
我刚刚意识到,当我为 Android 应用程序进行重构时,smartlock api 不允许我将 Fragment 传递给 ResolvingResultCallbacks 对象。
API 只允许我将 Activity 作为上下文传递,这意味着我需要在 Activity 的 onActivityResult() 方法而不是 Fragment 方法中处理凭据结果。但是在我们应用程序的当前设计中,我们希望 Fragment 处理智能锁逻辑。
这是我的保存代码:
Auth.CredentialsApi.save(mSmartLockApiClient, credential).setResultCallback(
new ResolvingResultCallbacks<Status>(mActivity, RC_CREDENTIALS_SAVE) {
@Override
public void onSuccess(Status status) {
mSmartLockSaveCallBack.onSuccess();
}
@Override
public void onUnresolvableFailure(Status status) {}
});
Run Code Online (Sandbox Code Playgroud)
实际上,对于请求凭据,我遇到了同样的问题,api 没有提供传递片段以开始解析的方法。但我找到了一个解决方法:
if (status.hasResolution()) {
mFragment.startIntentSenderForResult(
status.getResolution().getIntentSender(),
RC_CREDENTIALS_READ,
null,
0,
0,
0,
null);
}
Run Code Online (Sandbox Code Playgroud)
我同意令人失望的是 ResolvingResultCallbacks 不直接支持片段,但实现实际上非常简单。这是一个支持片段的变体:
public abstract class ResolvingResultCallbacks<R extends Result>
extends ResultCallbacks<R> {
private static final String TAG = "ResolvingResultCallback";
private final Fragment mFragment;
private final int mRequestCode;
protected ResolvingResultCallbacks(
@NonNull Fragment fragment,
int requestCode) {
mFragment = fragment;
mRequestCode = requestCode;
}
@Override
public final void onFailure(@NonNull Status result) {
if (result.hasResolution()) {
try {
mFragment.startIntentSenderForResult(
result.getResolution().getIntentSender(),
mRequestCode,
null, // fillInIntent,
0, // flagsMask,
0, // flagsValues
0, // extraFlags
null); // options
} catch (IntentSender.SendIntentException ex) {
Log.e(TAG, "Failed to start resolution", ex);
onUnresolvableFailure(
new Status(CommonStatusCodes.INTERNAL_ERROR));
}
} else {
onUnresolvableFailure(result);
}
}
@Override
public abstract void onSuccess(@NonNull R result);
@Override
public abstract void onUnresolvableFailure(@NonNull Status result);
}
Run Code Online (Sandbox Code Playgroud)
startIntentSenderForResult 仅Fragment在 API v24 中添加到本机类型,因此您可能需要改用支持Fragment实现。
我没有测试过这个,所以请告诉我它是否适合你。
| 归档时间: |
|
| 查看次数: |
369 次 |
| 最近记录: |