2015-08-19 5 views
0

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

Код для радиовещательного приемника:

private static final String TAG = ReceiveSms.class.getSimpleName(); 
    private SmsReceivedListner smsReceived = null; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

        //code to get sms.... 

        Log.e(TAG, "OTP received: " + verificationCode); 
        if (smsReceived != null) { 
         smsReceived.onSmsReceived(verificationCode); 
        } else { 
         if (Constants.isLoggingEnable) { 
          Logger.logError(TAG, "Sms listner is null"); 

         } 
        } 

       } 
      } 
     } catch (Exception e) { 
      Log.e(TAG, "Exception: " + e.getMessage()); 
     } 
    } 

    public void setOnSmsReceivedListener(Context context) { 
     this.smsReceived = (SmsReceivedListner) context; 
    } 

активность Код

public class EnterOtp extends MasterActivity implements View.OnClickListener, OnTaskComplete, SmsReceivedListner { 

    private static final String TAG = EnterOtp.class.getSimpleName(); 

    private Context context; 




    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.otp); 
     context = this; 
     init(); 
    } 

    private void init() { 

     setUpToolbar(); 




     receiveSms = new ReceiveSms(); 
     receiveSms.setOnSmsReceivedListener(this); 





    } 

Я использовал интерфейс, но всегда я получаю как null .so, что я могу сделать, чтобы получить OTP.

P.S- Я не хочу запускать новую активность с помощью намерения, потому что активность работает только, поэтому если через Intent я могу передать otp без запуска новой активности, а также для поддержки заднего стека?

+0

вы используете context.registerReceiver? – krystian71115

+0

Где вы создаете экземпляр объекта 'smsReceived'? –

+0

в моей активности, но все же я получаю его как null –

ответ

1

Если вы хотите получить смс только тогда, когда активность работает использовать этот код:

private void init() 
{ 
    receiveSms = new ReceiveSms(); 
    receiveSms.setOnSmsReceivedListener(this); 
    registerReceiver(receiveSms, new IntentFilter("android.provider.Telephony.SMS_RECEIVED")); 
} 

И удалить этот приемник от AndroidManifest.xml

Я надеюсь, что это помогло вам.

EDIT:

В OnDestroy вы должны использовать этот код:

protected void onDestroy() 
{ 
    super.onDestroy(); 
    // ... 
    unregisterReceiver(receiveSms); 
} 
+0

Можете ли вы объяснить, что этот код будет делать? –

+0

Вы регистрируете приемник в действии. Когда активность закрыта, sms не будет получен. И у вас всегда есть тот же самый экземпляр ReceiveSms. – krystian71115

+0

Но деятельность открывается только –

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