sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

Google Play servicesが利用可能かどうかをチェックする

テスト用のアプリならともかく、ちゃんとしたアプリでGoogle Play servicesの機能を使おうとするなら、まずはGoogle Play services自体が利用可能かどうかを調べてやらないといけませんよね。 (はい、実は私は今までちゃんとしてませんでした…)

もちろんAPIの方で、チェック&サービスを利用可能にするための簡単な機能が用意されていますので、それを使って実装してやりましょう。

Google Play servicesを利用するアクティビティのonCreateとかで、以下みたいな処理を組込めばOKです。

@Override
public void onCreate(Bundle savedInstanceState) {
    // Activityの初期化処理などは省略

    // Google Play services利用可否チェック
    int retCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (retCode == ConnectionResult.SUCCESS) {
        // 通常処理
    } else if (GooglePlayServicesUtil.isUserRecoverableError(retCode)) {
        // サービスは利用できない状態だが、ユーザーが対処可能なレベル
        GooglePlayServicesUtil.getErrorDialog(retCode, this, 1, new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                // 操作がキャンセルされたので、Activity実行中止等の処理
            }
        }).show();
        // 続きはonActivityResult()で行う
    } else {
        // ユーザーにはどうしようもない状態なのでActivity実行中止等の処理
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case 1:
        // Play Storeから戻って来たので再度Google Play servicesをチェック
        if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(this) == ConnectionResult.SUCCESS) {
            // 通常処理
        }else{
            // Google Play servicesが利用不可なので、Activity実行中止等の処理
        }
        break;
    default:
        super.onActivityResult(requestCode, resultCode, data);
    }
}

通常処理や実行中止等の処理をあちこちに書かなければならなくなりますが、メソッドにまとめておいて両方から呼び出すとか、自分自身に初期化イベントを投げて処理するとか好きなやり方で処理してください。

Google Play servicesが必須のアプリなら、onActivityResultの中で再度ダイアログを出して、Google Play servicesが有効になるか、ユーザーがキャンセルするまでしつこく繰り返すとかもありだと思います。