注意:我并没有尝试在模拟器中更新谷歌播放服务。我不在乎它是否过时。我提到它只是为了表明 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 构建文件进行更新的方法。
在我指定的 gradle 文件中:compile 'com.google.android.gms:play-services:7.5.0' 据我所知这是最新版本。 Android Studio 没有指示我应该将这一行更新到更新的版本。
SDK 管理器报告我安装的播放服务是“rev 25”,没有可用的更新。
当我在模拟器中测试时,代码工作正常,并且在 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/