ユーザーがGoogleプレイサービスの更新を拒否した場合、どのように正しくアクティビティを終了しますか?私は便宜のためにmakeGooglePlayServicesAvailable()
を使用していますが、私はその使用法の多くの例を見つけていません。makeGooglePlayServicesAvailableのキャンセルの処理
私はと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 has Leaked window ... 'という解決策は' onCreate'で 'checkGPS()'を実行しないことです。 [documentation](https://firebase.google.com/docs/cloud-messaging/android/client)は、「主なアクティビティのonCreate()メソッドとそのonResumeの2つの場所でこれを行うことをお勧めします() 方法。" – stardt
@stardt答えを更新しました。追加事項を確認するには、GPSを更新するために必要なネットワークの可用性をチェックすることを考えていただけです。私は 'makeGooglePlayServicesAvailable'について興味があります。 GPSをチェックする作業が始まるようです。私の答えとは異なるユースケースは何ですか? – Cheticamp