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

标签 android android-studio google-play-services

注意:我并没有尝试在模拟器中更新谷歌播放服务。我不在乎它是否过时。我提到它只是为了表明 logcat 以某种方式报告了我希望在应用程序中访问的实际内部版本号。

How can I determine the version of Google Play services? 相似但不相同

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

但是我无法找到确定用户需要通过应用程序代码或 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”。这对于模拟器来说是正常的,因为他们还没有发布新图像,但它提供了一个有趣的线索。

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

最佳答案

我已经设法做了一些挖掘并回答了我自己的问题。以下代码将执行我(也许还有其他人)想要的。

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

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

这样做可能需要您更新最低 SDK 目标。例如,我的手机 (5.0.1) 和平板电脑 (4.2.2) 都报告 API 检查成功,并且去 Play 商店没有显示任何一个的更新;但是,在桌面上安装的版本是 7895032,而在手机上是 7895438。

关于android - 如何确定 Android 上 Google Play 服务的实际内部版本号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31726196/

相关文章:

android - 无法检测设备兼容性。请选择目标设备

java - 什么是IndexOutOfBoundsException?我该如何解决?

java - android recyclerview viewholder Mediaplayer处理点击问题

java - 无法访问我的库实现中的类

android - 错误 : package com. google.android.gms.appstate 不存在

android - Adobe Flex Mobile 4.6 - iPad 与 Android 或 BlackBerry 上的元素定位似乎不一致

Android Studio 2.3 gradle 错误

android - 为什么我不能为同一个包名称创建多个 OAuth 2.0 客户端 ID?

android - 如何修复 gradle build for android studio 中的重复类

Android Studio 4.1 模拟器崩溃