Android自动读取短信验证码

extends:http://www.cnblogs.com/jiayaguang/p/4366384.html

实现自动获取手机的短信验证码,原理通过监听短信数据库的变化来解析短信,获取验证码。

直接附上代码:

1.建立一个监听数据库的类

import java.util.regex.Matcher;import java.util.regex.Pattern;import android.app.Activity;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Handler;import android.widget.EditText;/** * 监听短信数据库,自动获取短信验证码 *  * @author 贾亚光 * @date 2015-3-25 * */public class AutoGetCode extends ContentObserver {    private Cursor cursor = null;    private Activity activity;    private String smsContent = "";    private EditText editText = null;    public AutoGetCode(Activity activity, Handler handler, EditText edittext) {        super(handler);        this.activity = activity;        this.editText = edittext;    }    @Override    public void onChange(boolean selfChange) {        super.onChange(selfChange);        // 读取收件箱中指定号码的短信        cursor = activity.managedQuery(Uri.parse("content://sms/inbox"),                new String[] { "_id", "address", "read", "body" }, "address=? and read=?",                new String[] {"你要截获的电话号码", "0" }, "_id desc");        // 按短信id排序,如果按date排序的话,修改手机时间后,读取的短信就不准了        if (cursor != null && cursor.getCount() > 0) {            cursor.moveToFirst();            if (cursor.moveToFirst()) {                String smsbody = cursor                        .getString(cursor.getColumnIndex("body"));                String regEx = "(?<![0-9])([0-9]{" + 6 + "})(?![0-9])";                Pattern p = Pattern.compile(regEx);                Matcher m = p.matcher(smsbody.toString());                while (m.find()) {                    smsContent = m.group();                    editText.setText(smsContent);                }            }        }    }}

2.在使用的时候在activity中注册

AutoGetCode autoGetCode = new AutoGetCode(RegistCode.this, new Handler(),                regist_code);//regist_code 要显示验证码的EditText        // 注册短信变化监听        this.getContentResolver().registerContentObserver(                Uri.parse("content://sms/"), true, autoGetCode);

3.在合适的地方取消注册

@Override    protected void onDestroy() {        // TODO Auto-generated method stub        super.onDestroy();        this.getContentResolver().unregisterContentObserver(autoGetCode);    }

4.最后别忘记了添加权限

 <!-- 读写短信的权限 -->    <uses-permission android:name="android.permission.RECEIVE_SMS" />    <uses-permission android:name="android.permission.READ_SMS" />    <uses-permission android:name="android.permission.SEND_SMS" />    <uses-permission android:name="android.permission.WRITE_SMS" />

这样就可以了。

参考资料:

http://blog.sina.com.cn/s/blog_87dc03ea0101dvus.html

http://www.it165.net/pro/html/201406/15300.html

更多相关文章

  1. Android(安卓)监听开机广播打开APP
  2. Android之路——第一个Android小程序(Android电话拨号器)
  3. android电话服务
  4. C#与Android通过adb实现usb通讯
  5. android从资源文件中读取文件流显示
  6. Android(安卓)存储设备管理 -- Vold
  7. Android中Preference的使用以及监听事件分析
  8. Android错误处理——Android读取txt文件乱码解决方案
  9. Android(安卓)短信 彩信 wap push的接收

随机推荐

  1. OpenCore代码阅读--PVPlayer的实现
  2. Android实时视频采集方案
  3. 【Android(安卓)Studio】制作启动画面Spl
  4. 高级组件之选项卡
  5. MTK平台系统稳定性分析
  6. Android(安卓)获取视频(本地、网络)的第
  7. Android蓝牙理论
  8. Android之解决java.lang.UnsatisfiedLink
  9. android 开发浅谈(JDK && NDK)
  10. 【Android】AsyncTask机制