2016-07-27 3 views
-1

В моем андроиде приложения я реализующий автоматическое заполнение OTP от SMS, я узнал из этой ссылки http://androiddhina.blogspot.in/2015/06/reading-incoming-message-automatically-to-verify-OTP.htmlЧитать смс только для OTP

Моих сомнения BroadcastReceiver читают каждые смс, полученных пользователем, мы можем остановить это? Мне нужно прочитать sms в определенное время. Пример: только после того, как пользователь нажмет кнопку отправки OTP после этого, я должен прекратить читать смс.

Пожалуйста, помогите мне, как начать и остановить BroadcastReceiver в течение определенного периода времени.

+0

Зарегистрировать и отменить регистрацию приемника программно. –

+0

Вы можете зарегистрировать приемник на sen OTP & unregister receiver после получения OTP. Или вы можете прочитать SMS определенного номера. –

+0

Я знаю, что, пожалуйста, приведи пример для лучшего понимания. Спасибо u :) –

ответ

1

попробуйте это.

private BroadcastReceiver SmsListener = new BroadcastReceiver() { 

     @SuppressWarnings("deprecation") 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(
        "android.provider.Telephony.SMS_RECEIVED")) { 
       Bundle bundle = intent.getExtras(); // ---get the SMS message 
                // passed in--- 
       SmsMessage[] msgs = null; 
       // String msg_from; 
       if (bundle != null) { 
        // ---retrieve the SMS message received--- 
        try { 
         Object[] pdus = (Object[]) bundle.get("pdus"); 
         msgs = new SmsMessage[pdus.length]; 
         for (int i = 0; i < msgs.length; i++) { 
          msgs[i] = SmsMessage 
            .createFromPdu((byte[]) pdus[i]); 
          // msg_from = msgs[i].getOriginatingAddress(); 
          String msgBody = msgs[i].getMessageBody(); 
          // do your stuff 
         } 
        } catch (Exception e) { 
         // Log.d("Exception caught",e.getMessage()); 
        } 
       } 
      } 
     } 
    }; 

и согласно я сделал

@Override 
protected void onPause() { 
    super.onPause(); 
    YourActivity.this.unregisterReceiver(SmsListener); 
}; 

@Override 
protected void onResume() { 
    super.onResume(); 
    IntentFilter i = new IntentFilter(
      "android.provider.Telephony.SMS_RECEIVED"); 
    YourActivity.this.registerReceiver(SmsListener, i); 
} 

но другие предложили вы можете зарегистрировать BroadcastReceiver после запроса на OTP и незарегистрированными после получения OTP.

Счастливое кодирование.

+0

Спасибо, я изменил ваш код в соответствии с моим использованием :) –

+0

счастлив Помогите.. –

1

ваш может включать и отключать приемник, когда захотите. Попробуйте следующее,

Для Включения приемника

public void enableSMSReceiver(Context context){ 
    ComponentName component = new ComponentName(context, YOUR_RECEIVER.class); 
    PackageManager pm = context.getPackageManager(); 
    pm.setComponentEnabledSetting(
      component, 
      PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
      PackageManager.DONT_KILL_APP); 
} 

Для Disbling приемника

public static void disableSMSReceiver(Context context){ 
ComponentName component = new ComponentName(context, YOUR_RECEIVER.class); 
PackageManager pm = context.getPackageManager(); 
pm.setComponentEnabledSetting(
     component, 
     PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
     PackageManager.DONT_KILL_APP); 
} 
1

Теперь есть и другие варианты, чтобы прочитать SMS OTP автоматически, когда ваше приложение читает только ваши сообщения OTP, и это не требует каких-либо разрешений от пользователей.

1. Использование SMS Retriever API в Google Play услуги:

https://developers.google.com/identity/sms-retriever/overview

https://www.youtube.com/watch?v=jzWYv8y2v1c

Но это требует некоторых изменений на уровне сервера в формате OTP SMS. И это работает только в устройствах, на которых установлены Службы воспроизведения.

2. Использование createAppSpecificSmsToken в классе SMSManager (от только Android O):

https://developer.android.com/reference/android/telephony/SmsManager.html#createAppSpecificSmsToken(android.app.PendingIntent

https://code.tutsplus.com/tutorials/android-o-phone-number-verification-with-sms-token--cms-29141

Это работает только в Android O, как сейчас.

Смежные вопросы