gpt4 book ai didi

android - 如何使用 fragment 而不是使用 Activity 来启动 Smartlock 保存

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:22 25 4
gpt4 key购买 nike

我刚刚意识到,当我为 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) {}
});

实际上,对于请求凭据,我遇到了同样的问题,api 没有提供传递 fragment 以启动解析的方法。但我找到了解决方法:

 if (status.hasResolution()) {
mFragment.startIntentSenderForResult(
status.getResolution().getIntentSender(),
RC_CREDENTIALS_READ,
null,
0,
0,
0,
null);
}

最佳答案

我同意 ResolvingResultCallbacks 不直接支持 fragment 令人失望,但实现实际上非常简单。这是一个支持 fragment 的变体:

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);
}

startIntentSenderForResult 仅添加到 API v24 中的原生 Fragment 类型,因此您可能需要改用支持的 Fragment 实现。

我还没有测试过这个,所以请告诉我它是否适合你。

关于android - 如何使用 fragment 而不是使用 Activity 来启动 Smartlock 保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40654141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com