如何查看Google Play服务版本?


95

在我的应用程序中,我需要检查Google Play服务版本(已安装在用户设备中)。可能吗 ?如果是的话,我该怎么做?我搜索了Google,但找不到任何东西!

Answers:


94

我找到了简单的解决方案:

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
如何知道Play服务版本10.2的版本代码
Manmohan Soni,2018年

由于version28已被API28弃用,因此您应使用PackageInfoCompat.getLongVersionCode
G00fY

51

如果您在通过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之一: SUCCESSSERVICE_MISSINGSERVICE_VERSION_UPDATE_REQUIREDSERVICE_DISABLEDSERVICE_INVALID

它将确保设备使用的是您的应用所需的版本,如果不需要,则可以根据文档采取措施

编辑

GooglePlayServicesUtil.isGooglePlayServicesAvailable()已弃用,现在GoogleApiAvailability.isGooglePlayServicesAvailable()应改为使用。


2
GoogleApiAvailability现在是一个单例,因此您应该使用:GoogleApiAvailability.getInstance()。isGooglePlayServicesAvailable(activity)
Nativ,

@Nativ有什么方法可以检查在Android设备上运行的Google Play服务版本是否大于10.2
Manmohan Soni,2018年

我确定有@ManmohanSoni。我目前正转向iOS开发,因此对您没有太大帮助。
Nativ,2018年

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返回您的应用所需的最低版本,而不是用户设备上安装的播放服务版本。


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服务,它将显示已安装的版本。


我没有尝试其他答案中列出的其他编程方法,但是在应用程序管理器中搜索对我有用,谢谢!
肯特·格林

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.