如何检查安卓设备是否在版本10.2或更高版本上运行Google Play服务

3
根据谷歌官方页面上的文档,SMSRetriever API需要设备上安装有Google Play服务版本不低于10.2。
先决条件:SMS Retriever API仅适用于安装有Play服务版本10.2及更高版本的Android设备。 https://developers.google.com/identity/sms-retriever/request#2_start_the_sms_retriever 如何实现检查?我也已经检查了该方法。
public int isGooglePlayServicesAvailable (Context context, int minApkVersion)

在GoogleApiAvailability类中,但现在对于Google Play服务10.2,minApkVersion的值将是多少?请有人告诉我如何以最佳方式实现此功能。
3个回答

2

看起来这是不正确的。我的Galaxy S2(Google Play服务版本3.1.59)对addOnSuccessListener和addOnFailureListener都没有响应。 - Stanley Ko

1

这只是一个解决方案,用于进行版本比较。

 public boolean onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            if (googlePlayServiceEnabled() && isWithSMSRetrieverSupportedPlayServiceVersion()){
                //Good to go
                return true;
            }
            else{
                return false;
            }
    }

检查GooglePlay服务是否启用,并在出现错误时显示适当的错误对话框。
private boolean googlePlayServiceEnabled() {
        try {
            GoogleApiAvailability instance = GoogleApiAvailability.getInstance();
            int responseCode = instance.isGooglePlayServicesAvailable(context);
            switch (responseCode) {
                case ConnectionResult.SUCCESS:
                    return true;
                default:
                    Dialog errorDialog = instance.getErrorDialog(this, responseCode, 123);
                    errorDialog.setCancelable(false);
                    errorDialog.show();
                    break;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
}

隐式获取已安装的Play服务版本并将其与10.2进行比较。
private boolean isWithSMSRetrieverSupportedPlayServiceVersion() {
        try {
            PackageInfo pi = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0);
            if (pi == null)
                return false;
            if (pi.versionName == null || pi.versionName.isEmpty())
                return false;

            String playServicesVersion = pi.versionName;
            return isPlayServicesVersionValidForSMSRetriever(playServicesVersion);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

public static boolean isPlayServicesVersionValidForSMSRetriever(String v) {
        try {
            String index1 = v.substring(0, v.indexOf('.', 0));

            int versionInt1 = Integer.parseInt(index1);
            if (versionInt1 < 10)
                return false;
            else if (versionInt1 == 10) {
                String index2 = v.substring(3, 4);
                int versionInt2 = Integer.parseInt(index2);
                if (versionInt2 < 2) {
                    return false;
                } else {
                    return true;
                }
            } else
                return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

0

我知道这是一个旧问题,已经有答案了。但我需要为记录而写下这篇文章。


情况:

在我的情况下,Galaxy S2(Google Play服务版本3.1.59),我无法从addOnSuccessListeneraddOnFailureListener获得响应。此外,addOnCompleteListeneraddOnCanceledListener也没有被调用。


我尝试过的:

我想使用isGooglePlayServicesAvailableminApkVersion,但是没有谷歌播放服务的版本历史列表!


我的解决方案是

使用不带minApkVersionisGooglePlayServicesAvailable。我的意思是使用弃用的方法。在该方法中,它使用GOOGLE_PLAY_SERVICES_VERSION_CODE检查谷歌播放版本,并且这是已安装的谷歌播放服务。

@HideFirstParty
@KeepForSdk
public int isGooglePlayServicesAvailable(Context var1) {
    return this.isGooglePlayServicesAvailable(var1, GOOGLE_PLAY_SERVICES_VERSION_CODE);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接