Android Google Play Service 체크하기
Google Map 등의 서비스를 앱에서 사용하는 경우 단말에 Google Play Service 가 설치 되어 있어야 한다.
이 경우 Google Play Service가 설치 되어 있지 않으면, 위 그림처럼 상단에 설치와 관련된 Notification 이 보여지게 된다.
이 경우 사용자가 Notification 을 클릭하여 Google Play Service를 설치하거나, 업데이트를 해야 앱을 정상적으로 사용 할 수 있게 된다.
앱에서 해당 Notification 처럼 Google Play Service의 설치 상태를 받아와 앱에서 사용자에게 보여주려면 어떻게 해야할까?
int status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(activity);
를 사용하여 Google Play Service의 상태를 받아와야 한다.
해당 메소드를 호출시 받아오는 상태는 SUCCESS, SERVICE_MISSING, SERVICE_UPDATING, SERVICE_VERSION_UPDATE_REQUIRED, SERVICE_DISABLED, SERVICE_INVALID 등이 있다.
위 상태 값을 간략 하게 설명하면 아래와 같다. 자세한 설명은 ConnectionResult
에서 확인하기 바란다.
- SUCCESS : Google Play Service 가 정상적으로 설치 된 상태
- SERVICE_MISSING : Google Play Service 가 없는 상태
- SERVICE_UPDATING : Google Play Service 가 업데이트 중
- SERVICE_VERSION_UPDATE_REQUIRED : Google Play Service 버전이 오래되어 업데이트가 필요한 상태
- SERVICE_DISABLED : Google Play Service 가 사용중지 된 상태
- SERVICE_INVALID : Google Play Service 가 인증되지 않은 상태
위 상태 값을 보고 알맞게 사용자에게 알려주면 된다. SUCCESS 일때는 정상적으로 사용가능한 상태임으로 체크하지 않아도 된다.
간혹 어떤 단말에서 Google Play Service 의 버전이 오래되고, 사용안함 으로 설정 되어 있을때 SERVICE_VERSION_UPDATE_REQUIRED 로 값이 내려오곤 한다.
이 경우 앱에서 설치 페이지로 사용자를 이동시키면 설치 페이지로 이동하다가 바로 종료 되는 경우가 발생한다.
이때는 사용안함 을 먼저 해지 해주어야 정상적으로 설치 페이지로 이동이 가능하다. 이때 사용하는 코드는 아래와 같다.
boolean isEnabledGms;try
{
ApplicationInfo gmsInfo = activity.getPackageManager().getApplicationInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0);
isEnabledGms = gmsInfo.enabled;
} catch (PackageManager.NameNotFoundException e)
{
ExLog.d("GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE NameNotFoundException");
isEnabledGms = true;
}
위 코드를 통해 사용 중지 여부를 먼저 가져오고 위에서 가져온 status 의 처리를 해주면 된다.
물론 위 코드가 아닌 getApplicationEnabledSetting를 사용하여 상태값을 받아와 처리 할 수 있지만, 필요한건 단순히 설치 상태이기에 이 메소드를 쓰지 않았다. 또한 해당 메소드에서 내려받는 상태가 OS 버전 별로 다르게 내려올 수 있어서 쓰지 않았다.
위 값이 isEnabledGms 값이 false 일때, 설정 페이지로 이동해서 사용자가 설정값을 사용으로 바꾸게 하면 되는데, 이때 설정 페이지로의 이동은 아래와 같은 코드를 쓴다.
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE));
activity.startActivity(intent);
위 경우를 제외하고 구글 마켓으로 이동 할때는 아래와 같은 코드를 사용한다.
Intent intent = new Intent(Intent.ACTION_VIEW //
, Uri.parse("http://play.google.com/store/apps/details?id=" //
+ GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE));
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
activity.startActivity(intent);
또는,
Intent intent = new Intent(Intent.ACTION_VIEW //
, Uri.parse("market://details?id=" + GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE));
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.setPackage("com.android.vending");
activity.startActivity(intent);
등으로 이동 시켜주면 된다.
매번 개발을 하다보면 사용했던 코드도 까먹는 이상한 기억력을 가지고 있어, 리마인드 차원에서 올려본다.
더 좋은 방법이 있다면 더 좋은 방법을 사용하시길…
참고