注意:我不是要在模拟器中更新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构建文件进行更新的方法。
在我已指定的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方法 - 我已经在使用它,但是在需要更新的设备上报告成功。
答案 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;
}