2016-07-27 68 views
-1

在我的我實現自動從SMS填寫OTP的Android應用程序,我從這個鏈接瞭解到http://androiddhina.blogspot.in/2015/06/reading-incoming-message-automatically-to-verify-OTP.html讀取短信只對OTP

我的疑問是BroadcastReceiver讀取用戶接收到的每一個短信,就可以停止?我需要在特定時間讀取短信。例如:只有在用戶點擊發送OTP按鈕後,我才應該停止閱讀短信。

請幫助我如何啓動和停止BroadcastReceiver的時間特定的時期。

+0

以編程方式註冊和取消註冊您的接收器。 –

+0

您可以在獲得OTP後在接收器上註冊接收器並註銷接收器。或者你可以閱讀特定號碼的短信。 –

+0

我知道,請提供一些示例以便更好地理解。感謝ü:) –

回答

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); 
} 

但其他人則建議你可以請求OTP和獲取OTP後未註冊登記後的BroadcastReceiver。

快樂編碼。

+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

現在有其他的選擇來讀取OTP短信自動,你的應用程序讀取只有你的OTP短信,這不需要用戶的任何權限授予。

1.使用谷歌短信獵犬API發揮服務:

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

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

但是這需要在OTP短信格式一些服務器級別的變化。這僅適用於安裝了Play服務的設備。

2. SmsManager類(僅安卓O)使用createAppSpecificSmsToken:

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,截至目前。