gpt4 book ai didi

android - 我可以将 ResolvableApiException 传递给新 Activity 吗?

转载 作者:行者123 更新时间:2023-11-29 16:31:21 28 4
gpt4 key购买 nike

我正在使用 Google Play 服务获取用户的位置(包 com.google.android.gms:play-services-location:16.0.0)。如所述here ,您可以在必要时通过使用 startResolutionForResult 启动的对话框提示用户打开位置设置:

task.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
if (e instanceof ResolvableApiException) {
try {
ResolvableApiException resolvable = (ResolvableApiException) e;
resolvable.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException sendEx) {
// Ignore the error.
}
}
}

但是,我想在通过点击通知启动的新 Activity 中启动此对话框。为此,我尝试将 ResolvableApiException resolvable 添加到新 Activity 的 Intent 中,以便我可以在新 Activity 类中调用 startResolutionForResult。具体来说,我有:

final Intent intent = new Intent(context, NewActivity.class);
final Bundle extras = new Bundle();
extras.putSerializable(EXTRA_EXCEPTION, resolvable);
intent.putExtras(extras);

我收到以下错误:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.google.android.gms.common.api.ResolvableApiException)
Caused by: java.io.NotSerializableException: com.google.android.gms.common.api.Status

ResolvableApiException 最终继承自 Throwable,它实现了 Serializable,所以我希望我可以添加 resolvable 作为可序列化的额外内容。但似乎 ResolvableApiExceptionStatus 字段不可序列化。

关于如何使这种方法起作用或我可以使用另一种方法通过点击通知触发对话框的任何建议?谢谢!

最佳答案

我现在有了一个可行的解决方案!

关键是使用 getResolution() 而不是 startResolutionForResult(),如 here 所述. getResolution() 返回一个挂起的 intent,它是 Parcelable 并且可以附加到通知被点击时启动的新 Activity 的 intent:

final Intent intent = new Intent(context, NewActivity.class);
intent.putExtra(EXTRA_PENDING_INTENT, resolvable.getResolution());

然后我可以在我的新 Activity 中提取待定 Intent 并通过 startIntentSenderForResult() 启动对话框:

@Override
protected void onCreate(@Nullable final Bundle savedInstanceState) {
...

final PendingIntent pendingIntent = getIntent().getParcelableExtra(EXTRA_PENDING_INTENT);

try {
startIntentSenderForResult(pendingIntent.getIntentSender(), RC_LOCATION_SETTINGS, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
// Ignore the error
}
}

这种带有待定 Intent 的方法更有意义,因为它允许您选择何时启动解决对话框。

关于android - 我可以将 ResolvableApiException 传递给新 Activity 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55032920/

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