Android SMS检索器API在emulator中不工作 @覆盖 public void startClient(最终回调){ SmsRetrieverClient=SmsRetriever.getClient(上下文); client.startSmsRetriever(); Task=client.startSmsRetriever(); task.addOnSuccessListener(新的OnSuccessListener(){ @凌驾 成功时公开作废(作废避免){ callback.onSuccess(); } }); task.addOnFailureListener(新的OnFailureListener(){ @凌驾 public void onFailure(@NonNull异常e){ onFail(e); } }); }

Android SMS检索器API在emulator中不工作 @覆盖 public void startClient(最终回调){ SmsRetrieverClient=SmsRetriever.getClient(上下文); client.startSmsRetriever(); Task=client.startSmsRetriever(); task.addOnSuccessListener(新的OnSuccessListener(){ @凌驾 成功时公开作废(作废避免){ callback.onSuccess(); } }); task.addOnFailureListener(新的OnFailureListener(){ @凌驾 public void onFailure(@NonNull异常e){ onFail(e); } }); },android,sms,google-play-services,Android,Sms,Google Play Services,上面的代码是谷歌鼓励使用SMS Reytriever API的建议方式。此方法用于在BroadcastReceiver查找传入sms消息之前启动客户端。这里的问题是,onSuccess和onFailure从来没有被调用过,它们都没有被调用过,只有在Android模拟器中才会发生。我放了一些断点和日志来确认这一点,客户端从未通知回发生了什么 这不是散列问题,因为这只与SmsRetrieverClient的初始化有关 我真的很困惑,不知道发生了什么。从不通知听众是一种没有人会想到的行为,我甚至认为这

上面的代码是谷歌鼓励使用SMS Reytriever API的建议方式。此方法用于在BroadcastReceiver查找传入sms消息之前启动客户端。这里的问题是,onSuccess和onFailure从来没有被调用过,它们都没有被调用过,只有在Android模拟器中才会发生。我放了一些断点和日志来确认这一点,客户端从未通知回发生了什么

这不是散列问题,因为这只与SmsRetrieverClient的初始化有关


我真的很困惑,不知道发生了什么。从不通知听众是一种没有人会想到的行为,我甚至认为这个问题可能与其他因素有关,因为我最近格式化了我的计算机并重新安装了最新的Android Studio,因为在此之前,此代码同时在模拟器和物理设备上工作。

请尝试删除冗余的
client.startSmsRetriever()在第二行

确保模拟器/设备上的播放服务版本为>10.2.0

您可以使用检查播放服务版本-

@Override
public void startClient(final Callback callback) {
    SmsRetrieverClient client = SmsRetriever.getClient(context);
    client.startSmsRetriever();
    Task<Void> task = client.startSmsRetriever();
    task.addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            callback.onSuccess();
        }
    });
    task.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            callback.onFail(e);
        }
    });
}

谢谢,我完全错过了Play Services版本的部分。
private static final String MIN_SUPPORTED_PLAY_SERVICES_VERSION = "10.2";

public static boolean isSmsRetrieverApiAvailable(Context context) {

    if (!isPlayServicesAvailable(context)) {
        return false;
    }

    try {
        String playServicesVersionName = context.getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0).versionName; // should be >10.2.0
        return playServicesVersionName.compareTo(MIN_SUPPORTED_PLAY_SERVICES_VERSION) > 0;
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}

private static boolean isPlayServicesAvailable(Context context) {
    GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();
    int resultCode = googleApiAvailability.isGooglePlayServicesAvailable(context);
    return resultCode == ConnectionResult.SUCCESS;