本文主要是介绍Android短信息验证码自动填写详细介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近新发现安卓验证码在获取验证码自动填写这块比较火,今天很好奇的去研究了一下,所以马上写博客将这块和大家一起分享,在自己的真机上面测试 通过
1、下面是获取验证码的整个流程图
接下面我就不多说废话了,直接贴我这块的代码了
/***
*
* @类描述:
* @项目名称:CargoUser
* @包名: com.cargo.cargouser.utils
* @类名称:SmsOberver
* @创建人:wl
* @创建时间:2015年9月9日下午1:16:26
* @修改人:John
* @修改时间:2015年9月9日下午1:16:26
* @修改备注:
* @version v1.0
* @see [nothing]
* @bug [nothing]
* @Copyright
* @mail *@qq.com
*
* @描述: ContentObserver翻译成中文就是内容观察者,
* 目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理。
* ContentObserver一般和系统或第三方程序提供的Provider一起使用,
* 这些Provider一般情况下会有一个Uri,然后ContentObserver就去监听这些Uri数据的变化,
* 然后做出相应的处理
*/
public class SmsOberver extends ContentObserver {
private Handler mHandler;
private Context mContext;
private String code;
public SmsOberver(Handler handler,Context context) {
super(handler);
this.mContext=context;
this.mHandler=handler;
}
/**
* @描述:监听短信UR数据的变化,并对收件箱最后一条的内容进行读取 然后利用正则表达式 将短信验证码提取出来
* @方法名: onChange
* @param selfChange
* @param uri
* @创建人:John
* @创建时间:2015年9月9日下午1:18:14
* @修改人:John
* @修改时间:2015年9月9日下午1:18:14
* @修改备注:
* @throws
*/
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
//得到URI 然后将短信提出出来
Uri inbox=uri.parse("content://sms/inbox");
//然后将得到的短信进行倒序进行排序 然后得到最后一条的短信息 使用cursor查询
Cursor c=mContext.getContentResolver().query(inbox, null,null,null,"date desc");
//判断这个短信息是否为空的
if(c!=null)
{
if(c.moveToFirst())
{
//短信息的号码
String address=c.getString(c.getColumnIndex("address"));
Log.i("test","短信息的号码:"+address);
//短信息的内容
String body=c.getString(c.getColumnIndex("body"));
Log.i("test","短信息的内容:"+address);
//拿到短信息后 将连续4位或者6位的短信验证码提取出来
Pattern pattern=Pattern.compile("\\d{6}");
//使用matcher将body提取
Matcher matcher=pattern.matcher(body);
//然后使用matcher进行查找
if(matcher.find())
{
code=matcher.group(0);
//此时拿到code 怎样传递给UI呢??? 需要借助hander
mHandler.obtainMessage(RegisterActivity.SMS_RECEVIED_CODE,code).sendToTarget();
}
}
}
//这一次不要忘记 记得及时关闭
c.close();
}
}
*
* @类描述:
* @项目名称:CargoUser
* @包名: com.cargo.cargouser.utils
* @类名称:SmsOberver
* @创建人:wl
* @创建时间:2015年9月9日下午1:16:26
* @修改人:John
* @修改时间:2015年9月9日下午1:16:26
* @修改备注:
* @version v1.0
* @see [nothing]
* @bug [nothing]
* @Copyright
* @mail *@qq.com
*
* @描述: ContentObserver翻译成中文就是内容观察者,
* 目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理。
* ContentObserver一般和系统或第三方程序提供的Provider一起使用,
* 这些Provider一般情况下会有一个Uri,然后ContentObserver就去监听这些Uri数据的变化,
* 然后做出相应的处理
*/
public class SmsOberver extends ContentObserver {
private Handler mHandler;
private Context mContext;
private String code;
public SmsOberver(Handler handler,Context context) {
super(handler);
this.mContext=context;
this.mHandler=handler;
}
/**
* @描述:监听短信UR数据的变化,并对收件箱最后一条的内容进行读取 然后利用正则表达式 将短信验证码提取出来
* @方法名: onChange
* @param selfChange
* @param uri
* @创建人:John
* @创建时间:2015年9月9日下午1:18:14
* @修改人:John
* @修改时间:2015年9月9日下午1:18:14
* @修改备注:
* @throws
*/
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
//得到URI 然后将短信提出出来
Uri inbox=uri.parse("content://sms/inbox");
//然后将得到的短信进行倒序进行排序 然后得到最后一条的短信息 使用cursor查询
Cursor c=mContext.getContentResolver().query(inbox, null,null,null,"date desc");
//判断这个短信息是否为空的
if(c!=null)
{
if(c.moveToFirst())
{
//短信息的号码
String address=c.getString(c.getColumnIndex("address"));
Log.i("test","短信息的号码:"+address);
//短信息的内容
String body=c.getString(c.getColumnIndex("body"));
Log.i("test","短信息的内容:"+address);
//拿到短信息后 将连续4位或者6位的短信验证码提取出来
Pattern pattern=Pattern.compile("\\d{6}");
//使用matcher将body提取
Matcher matcher=pattern.matcher(body);
//然后使用matcher进行查找
if(matcher.find())
{
code=matcher.group(0);
//此时拿到code 怎样传递给UI呢??? 需要借助hander
mHandler.obtainMessage(RegisterActivity.SMS_RECEVIED_CODE,code).sendToTarget();
}
}
}
//这一次不要忘记 记得及时关闭
c.close();
}
}
二、接下来就要在需要调用的页面 绑定整这个观察者模式
1、初始化
mSmsOberver=new SmsOberver(timeHandler, this);
// 注册短信变化监听
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, mSmsOberver);
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, mSmsOberver);
2、在onpurse中去掉这个观察者
protected void onPause() {
this.getContentResolver().unregisterContentObserver(mSmsOberver);
super.onPause();
}
this.getContentResolver().unregisterContentObserver(mSmsOberver);
super.onPause();
}
3、在Handler中 handleMessage中接受这个消息 并填写进输入框中
if(msg.what==SMS_RECEVIED_CODE)
{
String code=(String) msg.obj;
codeInput.setText(code);
}
{
String code=(String) msg.obj;
codeInput.setText(code);
}
最后一点 千万别忘记了 声明读取短信息这块的权限
<uses-permission android:name="android.permission.READ_SMS" >
</uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS" >
</uses-permission>
</uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS" >
</uses-permission>
最后就大功告成了,本文属于原创,需要转载,请说明出处!
这篇关于Android短信息验证码自动填写详细介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!