2015-08-19 171 views
0

我知道這個問題已被問了很多次,但仍然無法解決我的問題。我想從短信的ActivityText的EditText中獲取OTP。爲此,我正在使用廣播接收機。從廣播接收器獲取消息到活動

規範廣播接收機:

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。所以我能做些什麼,以獲得OTP。

P.S- 我不想通過意圖開始新的活動,因爲活動只是運行,所以如果通過意圖我可以通過otp而不開始新的活動,並且還維護回棧?

+0

是否使用context.registerReceiver? – krystian71115

+0

你在哪裏實例化smsReceived對象? –

+0

在我的活動,但我仍然得到它爲空 –

回答

1

如果你想收到只有當活動運行使用該代碼的短信:

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

而且從AndroidManifest.xml中

刪除此接收器,我希望它幫你。

編輯:

在您的onDestroy必須使用此代碼:

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

你能解釋一下這段代碼會做什麼? –

+0

您正在活動中註冊接收者。當活動關閉時,不會收到短信。而且你總是有相同的ReceiveSms實例。 – krystian71115

+0

但該活動僅打開 –