Google Play 서비스 버전을 확인하는 방법은 무엇입니까?


95

내 애플리케이션에서 사용자 기기에 설치된 Google Play 서비스 버전을 확인해야합니다. 가능합니까? 그렇다면 어떻게해야합니까? Google을 검색했지만 아무것도 찾지 못했습니다!

답변:


95

간단한 해결책을 찾았습니다.

int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;

그러나 versionCodeAPI 28에서는 더 이상 사용되지 않으므로 다음을 사용할 수 있습니다 PackageInfoCompat.

long v = PackageInfoCompat.getLongVersionCode(getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ));

6
어떻게 플레이 서비스 버전 10.2의 버전 코드를 알고
만모한 SONI

versionCode는 API28에서 더 이상 사용되지 않으므로 PackageInfoCompat.getLongVersionCode
G00fY

52

당신이 Stan0에서 제공하는 링크를 보면 당신은 볼 :

public static final int GOOGLE_PLAY_SERVICES_VERSION_CODE

이 클라이언트 버전과 호환되기위한 최소 Google Play 서비스 패키지 버전 (AndroidManifest.xml android : versionCode에 선언 됨)입니다. 상수 값 : 3225000 (0x003135a8)

그래서, 당신은 당신의 매니페스트에이 부분을 설정하고, 다음 호출 할 때 isGooglePlayServicesAvailable(context):

public static int isGooglePlayServicesAvailable (Context context)

이 기기에 Google Play 서비스가 설치 및 사용 설정되어 있으며이 기기에 설치된 버전이이 클라이언트에 필요한 버전보다 이전 버전이 아닌지 확인합니다.

보고

  • 오류가 있었는지 여부를 나타내는 상태 코드입니다. ConnectionResult에서 다음 중 하나 일 수 있습니다 : SUCCESS, SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, SERVICE_DISABLED, SERVICE_INVALID.

기기가 앱에 필요한 버전을 사용하고 있는지 확인하고 그렇지 않은 경우 문서에 따라 조치를 취할 수 있습니다.

편집하다

GooglePlayServicesUtil.isGooglePlayServicesAvailable()더 이상 사용되지 않으며 이제 GoogleApiAvailability.isGooglePlayServicesAvailable()대신 사용해야합니다.


2
GoogleApiAvailability는 이제 싱글 톤이므로 다음을 사용해야합니다. GoogleApiAvailability.getInstance (). isGooglePlayServicesAvailable (activity)
Nativ

@Nativ 구글 플레이 서비스 버전은 안드로이드 장치에서 실행 여부를하는 것이보다 10.2 아니라는 것을 확인 할 수있는 방법이있다
만모한 SONI

@ManmohanSoni 나는 확신합니다. 저는 현재 iOS 개발로 전환 중이므로 많은 도움을 드릴 수 없습니다.
Nativ

15

내 해결책은 다음과 같습니다.

private boolean checkGooglePlayServices() {
        final int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        if (status != ConnectionResult.SUCCESS) {
            Log.e(TAG, GooglePlayServicesUtil.getErrorString(status));

            // ask user to update google play services.
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, 1);
            dialog.show();
            return false;
        } else {
            Log.i(TAG, GooglePlayServicesUtil.getErrorString(status));
            // google play services is updated. 
            //your code goes here...
            return true;
        }
    }

그리고 두 가지 옵션이 있습니다. 주석 처리 된대로 else 블록에 직접 코드를 작성하거나이 메서드에 대해 반환 된 부울 값을 사용하여 사용자 지정 코드를 작성합니다.

이 코드가 누군가에게 도움이되기를 바랍니다.


6

최신 업데이트에서이 코드로 끝났고 관련된 모든 항목을 관리하는 편리한 방법을 만들었습니다.

서비스 가용성과 관련된 모든 세부 사항 및 관련 세부 사항은 여기에서 확인할 수 있습니다 .

 private void checkPlayService(int PLAY_SERVICE_STATUS)
    {
        switch (PLAY_SERVICE_STATUS)
        {
            case ConnectionResult.API_UNAVAILABLE:
                //API is not available
                break;
            case ConnectionResult.NETWORK_ERROR:
                //Network error while connection 
                break;
            case ConnectionResult.RESTRICTED_PROFILE:
                //Profile is restricted by google so can not be used for play services
                break;
            case ConnectionResult.SERVICE_MISSING:
                //service is missing
                break;
            case ConnectionResult.SIGN_IN_REQUIRED:
                //service available but user not signed in
                break;
            case ConnectionResult.SUCCESS:
                break;
        }
    }

이렇게 사용합니다.

GoogleApiAvailability avail;
 int PLAY_SERVICE_STATUS = avail.isGooglePlayServicesAvailable(this);
 checkPlayService(PLAY_SERVICE_STATUS);

그리고 버전 GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE;은 당신에게 줄 것입니다.

그리고 제가 연구하는 동안 찾은 가장 유용한 답변 중 하나 는 여기입니다.


6
int status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this);
if(status != ConnectionResult.SUCCESS) {
     if(status == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED){
        Toast.makeText(this,"please update your google play service",Toast.LENGTH_SHORT).show();
     }
     else {
        Toast.makeText(this, "please download the google play service", Toast.LENGTH_SHORT).show();
     }
}

4

중요 : GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE는 사용자 기기에 설치된 Play 서비스 버전이 아니라 앱에 필요한 최소 버전을 반환합니다.


1

오늘 아침에도 같은 문제가 발생했습니다. 그리고 stan0의 조언에 따라 완료되었습니다. 감사합니다 stan0.

https://developers.google.com/maps/documentation/android/map 의 샘플 코드를 기반으로 한 번만 변경하면 됩니다.

private void setUpMapIfNeeded() {
    // Do a null check to confirm that we have not already instantiated the
    // map.
    if (mMap == null) {
        FragmentManager mgr = getFragmentManager();
        MapFragment mapFragment = (MapFragment)mgr.findFragmentById(R.id.map);
        mMap = mapFragment.getMap();
        // Check if we were successful in obtaining the map.
        if (mMap != null) {
            // The Map is verified. It is now safe to manipulate the map.
            setUpMap();
        }else{
            // check if google play service in the device is not available or out-dated.
            GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);

            // nothing anymore, cuz android will take care of the rest (to remind user to update google play service).
        }
    }
}

또한 manifest.xml에 다음과 같이 속성을 추가해야합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.package.name"
android:versionCode="3225130"
android:versionName="your.version" >

그리고 "3225130"의 값은 프로젝트에서 사용중인 google-play-services_lib에서 가져옵니다. 또한 해당 값은 google-play-services_lib의 manifest.xml과 동일한 위치에 있습니다.

도움이 되길 바랍니다.


1

애플리케이션 관리자에서 Google Play 서비스를 검색하면 설치된 버전이 표시됩니다.


다른 답변에 나열된 다른 프로그래밍 방식을 시도하지 않았지만 응용 프로그램 관리자에서 검색하면 저에게 효과적이었습니다. 감사합니다!
Kent.Green

1

업데이트 (2019.07.03) Kotlin 버전 :

class GooglePlayServicesUtil {

    companion object {

        private const val GOOGLE_PLAY_SERVICES_AVAILABLE_REQUEST = 9000

        fun isGooglePlayServicesWithError(activity: Activity, showDialog: Boolean): Boolean {
            val status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(activity)
            return if (status != ConnectionResult.SUCCESS) {
                if (showDialog) {
                    GoogleApiAvailability.getInstance().getErrorDialog(activity, status, GOOGLE_PLAY_SERVICES_AVAILABLE_REQUEST).show()
                }
                true
            } else {
                false
            }
        }

    }

}

0

다음 기능을 사용하여 Google Play 서비스 사용 가능 여부 확인

 private boolean checkGooglePlayServicesAvailable() {
    final int connectionStatusCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (GooglePlayServicesUtil.isUserRecoverableError(connectionStatusCode)) {
        showGooglePlayServicesAvailabilityErrorDialog(connectionStatusCode);
        return false;
    }
    return true;
}

0
int apkVersion = GoogleApiAvailability.getInstance().getApkVersion(getContext());

다음과 같은 결과를 얻습니다.

int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;

그러나 두 번째 것은 try-catch 안에 넣어야합니다.


-4
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
    int currentVersion = getAppVersion(context);
    if (registeredVersion != currentVersion) {
        Log.i(TAG, "App version changed.");
        return "";
    }

이것은 해결책이 아닙니다.
Stanley Kou
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.