Android Google Play Service 체크하기

SeungWon, Lee
7 min readJan 2, 2018

--

Google Map 등의 서비스를 앱에서 사용하는 경우 단말에 Google Play Service 가 설치 되어 있어야 한다.

구글 플레이 서비스 사용 Notification

이 경우 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);

등으로 이동 시켜주면 된다.

매번 개발을 하다보면 사용했던 코드도 까먹는 이상한 기억력을 가지고 있어, 리마인드 차원에서 올려본다.

더 좋은 방법이 있다면 더 좋은 방법을 사용하시길…

참고

--

--