根据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将具有什么价值。任何人请告诉我如何以最佳方式实现这一点。
答案 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)无法从addOnSuccessListener
和addOnFailureListener
处获得响应。另外,未调用addOnCompleteListener
或addOnCanceledListener
。
我尝试过的事情:
我想将isGooglePlayServicesAvailable
与minApkVersion
一起使用,但是没有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);
}