Мое приложение уже есть в магазине игр с тысячами загрузок и прекрасно работает, за исключением Android10 (Android Q), с момента выпуска Android 10 оно застревает на экране входа в систему. Поскольку LoginScreen включает в себя проверку OTP с номером мобильного телефона пользователя, после нажатия кнопки входа в систему запускается API-интерфейс SMS Retriever, и OTP получен, но не может его прочитать, а BroadcastReceiver всегда переходит к условиям TimeOut. Позже я отменил регистрацию (BroadcastReceiver) на onDestroy. Я протестировал его на OnePlus6.Пожалуйста, предложите любое решение для этого.
Мой код:
private void startSMSRetriver()
{
SmsRetrieverClient client = SmsRetriever.getClient(NewLogInActivity.this );
// Starts SmsRetriever, which waits for ONE matching SMS message until timeout
// (5 minutes). The matching SMS message will be sent via a Broadcast Intent with
// action SmsRetriever#SMS_RETRIEVED_ACTION.
com.google.android.gms.tasks.Task<Void> task = client.startSmsRetriever();
task.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
System.out.println("SMS Success");
}
});
task.addOnFailureListener(new OnFailureListener()
{
@Override
public void onFailure(@NonNull Exception e)
{
System.out.println("SMS Failure");
}
});
}
BroadcastReceiver
public class MySMSBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
if (SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction()))
{
final Bundle bundle = intent.getExtras();
try
{
if (bundle != null)
{
Status status =(Status) bundle.get(SmsRetriever.EXTRA_STATUS);
if(status != null)
{
switch(status.getStatusCode())
{
//I want this
case CommonStatusCodes. SUCCESS :
System.out.println("SUCCESS");
break;
//always hits timeout
case CommonStatusCodes.TIMEOUT :
System.out.println("Timeout Hit");
break;
default:
break;
}
}
}
} catch (Exception e)
{
e.getMessage();
System.out.println("Msg Exception 2 ::"+e.getMessage());
}
}
}
}
LoginButton (LoginScreen) вызывается под кодом: -
startSMSRetriver();
otpReceiver = new MySMSBroadcastReceiver();
registerReceiver(otpReceiver, new IntentFilter("com.google.android.gms.auth.api.phone.SMS_RETRIEVED"));