如何确定Android上Google Play服务的实际内部版本号?

时间:2015-07-30 14:14:50

标签: android android-studio google-play-services

注意:我不是要在模拟器中更新Google Play服务。我不在乎它已经过时了。我之所以提到它只是为了表明logcat以某种方式报告了我希望在应用程序中访问的实际内部版本号。

How can I determine the version of Google Play services?

类似,但不一样

如果设备上未安装最新的Google Play服务,我使用Android Studio 1.2.2开发的应用程序遇到问题,但GoogleApiAvailability未报告问题,因此代码指示用户更新永远不会被称为。如果我手动告诉用户使用指向https://play.google.com/store/apps/details?id=com.google.android.gms&hl=en的手动链接更新Play商店中的播放服务,则会提供更新,并且应用程序在安装后可以正常运行。

但是我无法找到确定用户是否需要通过应用程序代码或gradle构建文件进行更新的方法。

  1. 在我已指定的gradle文件中:compile' com.google.android.gms:play-services:7.5.0'据我所知,这是最新版本。 Android Studio并未表明我应将此行更新为较新版本。

  2. SDK管理器报告我安装的播放服务是" rev 25",并且没有可用的更新。

  3. 当我在模拟器中测试时,代码正常工作,在logcat中我看到了消息:" W / GooglePlayServicesUtil:Google Play服务已过期。需要7571000但发现6774470"。这对于模拟器来说是正常的,因为它们还没有发布新的图像,但它提供了一个有趣的线索。

  4. 有没有办法以编程方式获取上面第3项中报告的内部版本号?如果是这样,我可以与之比较,而不是使用GoogleApiAvailability的isgooglePlayServicesAvailable方法 - 我已经在使用它,但是在需要更新的设备上报告成功。

2 个答案:

答案 0 :(得分:0)

我设法做了一点挖掘并回答了我自己的问题。以下代码将执行我(或许其他人)想要的操作。

PackageInfo pi = getPackageManager().getPackageInfo("com.google.android.gms", 0);
if (pi.versionCode < VERSION_YOU_WANT)
{
    // instruct user to update
}

我已经完成的工作是将它包装在所需的异常处理程序中,并在API检查报告SUCCESS时运行它。如果版本太低,我调用getErrorDialog就像API检查失败一样,使用ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED而不是返回的SUCCESS值。

执行此操作可能需要您更新最低SDK目标。例如,我的手机(5.0.1)和平板电脑(4.2.2)都会通过API检查报告成功,而进入游戏商店则不显示任何一个的更新;但是,在桌面上安装的版本是7895032,而在手机上则是7895438。

答案 1 :(得分:-1)

如果有更新,此功能将告诉用户更新GooglePlaServices。如果此函数返回true

,则可以开始注册过程
private boolean checkPlayServices()
{
    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);

    if (resultCode != ConnectionResult.SUCCESS)
    {
        if (GooglePlayServicesUtil.isUserRecoverableError(resultCode))
            GooglePlayServicesUtil.getErrorDialog(resultCode, this, 9000).show();

        else
        {
            Log.i(TAG, "This device is not supported.");
            finish();
        }

        return false;
    }

    return true;
}