美文网首页自动化测试Android开发干货集中营Android知识
BroadcastReceiver的一次实践-自动填充验证码

BroadcastReceiver的一次实践-自动填充验证码

作者: 选一个昵称这么难 | 来源:发表于2017-09-07 14:44 被阅读228次

    用广播接受者实现自动填充验证码功能

    public class SMSReceiver extends BroadcastReceiver {
        //短信回调接口
        private static MessageListener mMessageListener;
        //这个是收到短信的广播action,我怎么知道是哪个action,百度啊
        public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(SMS_RECEIVED_ACTION)) {
                Object[] pdus = (Object[]) intent.getExtras().get("pdus");
                for(Object pdu:pdus) {
                    SmsMessage smsMessage = SmsMessage.createFromPdu((byte [])pdu);
                    //短信发送者
                    String sender = smsMessage.getDisplayOriginatingAddress();
                    //过滤发送者
                    if ("10086".equals(sender)){
                        //短信内容
                        String content = smsMessage.getDisplayMessageBody();
                        mMessageListener.onReceived(content);
                    }
    
                }
            }
    
        }
        //回调接口
        public interface MessageListener {
            void onReceived(String message);
        }
    
        public void setOnReceivedMessageListener(MessageListener messageListener) {
            this.mMessageListener = messageListener;
        }
    
    }
    

    广播接受者可以在清单文件注册,也可以在代码中动态注册,这里我们选择动态注册,因为我们不需要短信的广播接受者一直运行,只需要在相应的页面运行,接收短信就行.
    在这里我们自定义了一个接口MessageListener,该接口就是用来回调短信内容的,我们在需要短信的页面,比如登录页面设置这个监听,就可以获取到短信内容了.

    然后看看怎么使用的:

    这里我是在fragment中使用的
     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            receiver = new SMSReceiver();
            //实例化过滤器并设置要过滤的广播
            IntentFilter intentFilter = new IntentFilter(ACTION);
            intentFilter.setPriority(Integer.MAX_VALUE);
            //注册广播
            getActivity().registerReceiver(receiver, intentFilter);
            receiver.setOnReceivedMessageListener(new SMSReceiver.MessageListener() {
                @Override
                public void onReceived(String message) {
                    if (message.contains("XXX")) {
                        processMessage(message);
                    }
                }
            });
        }
    
        //具体的处理逻辑根据要求来做
        private void processMessage(String message) {
            //根据短信内容截取验证码
            et_code.setText(message.substring(7, 11));
        }
    

    最后不要忘了注销广播接受者

     @Override
        public void onDestroy() {
            super.onDestroy();
            getActivity().unregisterReceiver(receiver);
        }
    

    相关文章

      网友评论

      本文标题:BroadcastReceiver的一次实践-自动填充验证码

      本文链接:https://www.haomeiwen.com/subject/vydijxtx.html