@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);
}
});
}
Приведенный выше код является рекомендуемым способом, который Google рекомендует использовать их API-интерфейс SMS Reytriever.Этот метод предназначен для запуска клиента до того, как BroadcastReceiver выполнит поиск входящих SMS-сообщений.Проблема здесь в том, что onSuccess и onFailure никогда не вызываются, ни один из них, и происходит только с эмуляторами Android.Я поставил несколько точек останова и логов, чтобы подтвердить это, клиент никогда не уведомляет о том, что произошло.
Это не проблема хеширования, поскольку она связана только с инициализацией SmsRetrieverClient.
Я действительно смущен и не знаю, что происходит.Никогда не уведомлять слушателя - это поведение, которого никто не ожидал, я даже думаю, что эта проблема может быть связана с другими факторами, так как я недавно отформатировал свой компьютер и переустановил последнюю версию Android Studio, потому что до этого этот код работал на обоих эмуляторахи физические устройства.