利用BroadCastReceiver读取短信

来源:互联网 发布:mac怎么给手机换铃声 编辑:程序博客网 时间:2024/05/29 03:21

案例2:读取短信验证码,自动填写

 注意: *  1.短信发送到手机上是以单元格式的形式发送到手机上 *  2.SmsMessage是一个短信的抽象类,封装了包括一些关于短信的信息 *      (发送人的手机号,短信内容等) 步骤:    (1).创建一个广播(写一个类继承BroadCastReceiver,实现onReceive(Context context, Intent intent)方法)    (2).在清单文件中注册receiver,action为短信的action        <receiver android:name=".MyBroadCastReceiver">            <intent-filter>                <!--手机短信的action-->                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>            </intent-filter>        </receiver>    读取短信需要添加权限:         <uses-permission android:name="android.permission.RECEIVE_SMS"/>    (3).在onReceive()中实现短信的逻辑代码:        //收到短信后进行逻辑处理        @Override        public void onReceive(Context context, Intent intent) {            Bundle bundle = intent.getExtras();            if (bundle != null) {                //pdus 数据格式单元,原始数据需要转化成SMSMessage[]数组,才能获得里面的具体信息                Object[] pdus = (Object[]) bundle.get("pdus");                //创建长度为数据格式长度的短信数组                SmsMessage[] smsMessages = new SmsMessage[pdus.length];                for (int i = 0; i < pdus.length; i++) {                    //将一个数据单元转换成一个短信对象                    smsMessages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);                }                for (int n = 0; n < pdus.length; n++) {                    //获得短信的地址                    String address = smsMessages[n].getDisplayOriginatingAddress();                    //短信的内容                    String content = smsMessages[n].getDisplayMessageBody();                    //匹配是否有短信验证码                    String result = getyzm(content,4);                    Toast.makeText(context,result, Toast.LENGTH_SHORT).show();                }            }        }        /**         * 从短信字符窜提取验证码         *         * @param body      短信内容         * @param YZMLENGTH 验证码的长度 一般6位或者4位         * @return 接取出来的验证码         */        public static String getyzm(String body, int YZMLENGTH) {            // 首先([a-zA-Z0-9]{YZMLENGTH})是得到一个连续的六位数字字母组合            // (?<![a-zA-Z0-9])负向断言([0-9]{YZMLENGTH})前面不能有数字            // (?![a-zA-Z0-9])断言([0-9]{YZMLENGTH})后面不能有数字出现            //  获得数字字母组合            //    Pattern p = Pattern.compile("(?<![a-zA-Z0-9])([a-zA-Z0-9]{" + YZMLENGTH + "})(?![a-zA-Z0-9])");            //  获得纯数字            Pattern p = Pattern.compile("(?<![0-9])([0-9]{" + YZMLENGTH + "})(?![0-9])");            Matcher m = p.matcher(body);            if (m.find()) {                System.out.println(m.group());                return m.group(0);            }            return null;        }
0 0
原创粉丝点击