2016-07-27 67 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,截至目前。