【发布时间】:2019-07-28 16:45:00
【问题描述】:
我正在使用 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.
}
}
}
但是,我想在通过点击通知启动的新活动中启动此对话框。为此,我试图将ResolvableApiException resolvable 添加到新活动的意图中,以便我可以在新活动类中调用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 作为可序列化的额外内容。但似乎ResolvableApiException 的Status 字段不可序列化。
关于如何使这种方法发挥作用或我可以使用其他方法通过点击通知来触发对话框的任何建议?谢谢!
【问题讨论】:
-
你可能可以检查这个SO post,类Exception没有实现Parcelable接口。除非 android 破坏了一些我不知道的基本 Java 结构,否则这意味着您不能将 Exception 作为 Parcel 放入 Bundle。如果您想将异常“传递”给新 Activity,只需将您在新 Activity 中需要的各个方面捆绑起来即可。请检查开发人员提供的代码。
标签: android google-play-services google-location-services