13

Android で新しい Google Maps V2 API を使用する場合、ユーザーのデバイスに Google Play (サービス) アプリがインストールされていないと、エラー メッセージが表示されます。このエラー メッセージのスタイルを何らかの方法でオーバーライドして、不快感を軽減し、アプリのスタイルをより適切に合わせることができるかどうか疑問に思っています。

エラーは次のようになります。

このアプリは、Google Play サービスを更新しない限り実行できません。

4

3 に答える 3

24

調査を行った結果、Google Playサービスライブラリの存在を手動で確認し、カスタムエラーダイアログまたはエラーレイアウトを表示することが最善の解決策であると判断しました。GooglePlayServicesUtilこれをかなり簡単にするいくつかのユーティリティメソッドがあります。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    int statusCode =
            GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (statusCode == ConnectionResult.SUCCESS) {
        // Continue with your regular activity/fragment configuration.
    } else {
        // Hide the map fragment so the default error message is not
        // visible.    
        findViewById(R.id.map).setVisibility(View.GONE);

        // Show a custom error message
        showErrorMessage(statusCode);
    }
}

private void showErrorMessage(final int statusCode) {
    // I've outlined two solutions below. Pick which one works best for
    // you and remove the if-block.
    boolean showDialog = false;

    if (showDialog) {
        // This is the easiest method and simply displays a pre-configured
        // error dialog
        GooglePlayServicesUtil.getErrorDialog(statusCode, this, 0).show();
    } else {
        // Show a completely custom layout
        findViewById(R.id.error).setVisibility(View.VISIBLE);

        // Wire up the button to install the missing library
        Button errorButton = (Button) findViewById(R.id.error_button);
        errorButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    // Perform the correct action for the given status
                    // code!
                    GooglePlayServicesUtil.getErrorPendingIntent(
                            statusCode, getActivity(), 0).send();
                } catch (CanceledException e1) {
                    // Pass
                }
            }
        });
    }
}
于 2012-12-20T22:02:16.347 に答える