如何检查Android设备是否具有在10.2或更高版本上运行的Google Play服务

时间:2018-06-12 09:38:57

标签: android google-play-services

根据google官方网页上的文档,SMSRetriever api需要设备上的最低10.2的Google Play服务。

  

先决条件

     

SMS Retriever API仅适用于具有Play功能的Android设备   服务版本10.2及更新版本。   https://developers.google.com/identity/sms-retriever/request#2_start_the_sms_retriever

如何实施检查?我还检查了方法

public int isGooglePlayServicesAvailable (Context context, int minApkVersion)
GoogleApiAvailability类的

。但现在再次说明,在谷歌播放服务10.2的情况下,minApkVersion将具有什么价值。任何人请告诉我如何以最佳方式实现这一点。

3 个答案:

答案 0 :(得分:2)

SmsRetrieverClient遵循较新的GoogleApi连接模式,因此您不必担心版本兼容性,因为基础框架可以为您处理所有分辨率。

实际上,最好通过在这些任务返回API调用(https://developers.google.com/android/reference/com/google/android/gms/tasks/Task)中添加侦听器,而不是事先检查可用性来专门处理故障情况。

答案 1 :(得分: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;
}

隐式获得已安装的播放服务版本,并将其与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;
    }

答案 2 :(得分:0)

我知道这是一个老问题,已经回答了。但是我需要写这个作为记录。


情况:

在我的情况下,银河S2(Google Play服务版本为3.1.59)无法从addOnSuccessListeneraddOnFailureListener处获得响应。另外,未调用addOnCompleteListeneraddOnCanceledListener


我尝试过的事情

我想将isGooglePlayServicesAvailableminApkVersion一起使用,但是没有Google Play服务的版本历史记录列表!


我的解决方案是

使用isGooglePlayServicesAvailable而不使用minApkVersion。我的意思是不赞成使用的方法。在这种方法中,它正在使用GOOGLE_PLAY_SERVICES_VERSION_CODE检查Google Play版本,这是已安装的Google Play服务。

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