You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取设备上已安装的Google Play Games及Google Play服务版本?

获取设备上已安装的Google Play服务及Play Games版本,以及禁用后的登录处理

一、获取已安装的Google Play服务版本

你说得没错,GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE返回的是应用依赖的最低版本,并非设备上实际安装的版本。要拿到设备上的真实版本,直接通过PackageManager查询Google Play服务的包信息就行:

try {
    PackageInfo packageInfo = getPackageManager().getPackageInfo("com.google.android.gms", 0);
    int installedVersionCode = packageInfo.versionCode;
    String installedVersionName = packageInfo.versionName;
    // 这里就获取到了已安装的版本号和版本名称
} catch (PackageManager.NameNotFoundException e) {
    // 说明设备未安装Google Play服务,或者服务被禁用
    e.printStackTrace();
}

com.google.android.gms是Google Play服务的固定包名,放心用就行。

二、获取已安装的Google Play Games版本

思路和上面一致,只要把包名换成Google Play Games的固定包名com.google.android.play.games:

try {
    PackageInfo gamesPackageInfo = getPackageManager().getPackageInfo("com.google.android.play.games", 0);
    int gamesVersionCode = gamesPackageInfo.versionCode;
    String gamesVersionName = gamesPackageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
    // Google Play Games未安装或被禁用
    e.printStackTrace();
}

三、处理Google Play Games被卸载/禁用后的登录异常

用户卸载或禁用Play Games后,登录流程必然会出问题,毕竟相关API找不到对应的服务了。给你几个实用的处理方案:

  • 提前做状态检查:发起登录请求前,先通过上面的包查询方法判断Play Games是否存在且可用。如果检测到缺失,直接给用户友好提示,比如“请安装并启用Google Play Games以使用登录功能”,避免后续出现崩溃或无响应。
  • 捕获API调用异常:在调用Play Games登录相关API(比如signInSilently()、startActivityForResult())时,一定要做好异常捕获。回调里如果拿到SIGN_IN_FAILED、SERVICE_MISSING这类服务缺失相关的错误码,及时引导用户处理。
  • 提供降级方案:如果应用允许,可以补充其他登录方式(比如邮箱、第三方社交登录)作为备选,避免因为Play Games不可用导致用户完全无法使用账号功能。

另外补充个小技巧:GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context)可以快速判断Google Play服务的整体状态,但要精准判断Play Games的存在性,还是得用包查询的方式,毕竟Play Games是Play服务的独立组件。

内容的提问来源于stack exchange,提问作者user2713671

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:38:30