当用户拒绝更新Google Play服务时,您如何正确关闭活动?我正在使用makeGooglePlayServicesAvailable()
,因为它看起来很方便,但我还没有找到很多使用它的例子。处理取消makeGooglePlayServicesAvailable
我在onCreate()
和onResume()
中使用checkGooglePlayServices()
(代码如下)。
public class MainScreen extends Activity {
private static final String TAG = "MainScreen";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
checkGooglePlayServices();
}
@Override
protected void onResume() {
super.onResume();
checkGooglePlayServices();
}
void checkGooglePlayServices()
{
GoogleApiAvailability.getInstance()
.makeGooglePlayServicesAvailable(this)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void ignored) {
Log.d(TAG,"makeGooglePlayServicesAvailable().onSuccess()");
// GPS available; do something useful
}
}).addOnFailureListener(this,new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG,"makeGooglePlayServicesAvailable().onFailure()");
e.printStackTrace();
Toast.makeText(MainScreen.this,
"Google Play services upgrade required",
Toast.LENGTH_SHORT).show();
// can't proceed without GPS; quit
MainScreen.this.finish(); // this causes a crash
}
});
}
}
应用崩溃时finish()
叫做:
com.example E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example, PID: 5336
java.lang.RuntimeException: Unable to destroy activity {com.example/com.example.MainScreen}: java.lang.IllegalStateException: Task is already complete
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4438)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4456)
...
Caused by: java.lang.IllegalStateException: Task is already complete
at com.google.android.gms.common.internal.zzbo.zza(Unknown Source:8)
at com.google.android.gms.tasks.zzn.zzDH(Unknown Source:8)
at com.google.android.gms.tasks.zzn.setException(Unknown Source:9)
at com.google.android.gms.tasks.TaskCompletionSource.setException(Unknown Source:2)
...
感谢这似乎是检查GPS的常用方法。如果有人有关于使用'makeGooglePlayServicesAvailable'的答案,我会留下更长的问题。你还想要检查什么?您链接的文档仅用于检查可用性。 – stardt
如果它可以帮助某人,解决方案获取'E/WindowManager:android.view.WindowLeaked:Activity com.example.MainScreen泄漏了窗口...'是不会在'onCreate'中运行'checkGPS()',尽管[文档](https://firebase.google.com/docs/cloud-messaging/android/client)说:“建议在两个位置执行此操作:在主活动的onCreate()方法和onResume () 方法。” – stardt
@stardt我更新了答案。对于需要检查的其他内容,我只是在考虑检查网络可用性,因为需要更新GPS。不过,我对'makeGooglePlayServicesAvailable'很好奇。它看起来像开始检查GPS的任务。这与我在答案中描述的有何不同? – Cheticamp