最近做注册的时候看到很多app在手机接受到短信的时候直接填写验证码到界面省略用户自动输入,感觉这样确实蛮人性化的呵呵,于是自己也做了一个

步骤:
首先我使用了ContentObserver监听短信,(最好知道您的验证码从那个号码发过来)
然后从短信中用正则的分组去拿到验证码(当然验证码必须是什么格式)
贴出关键代码:
注册监听短信数据库的
ContentObserver c=new ContentObserver(han) {
@Override
public void onChange(boolean selfChange) { // TODO Auto-generated method stub
super.onChange(selfChange);
han.sendEmptyMessage(0);
}
};
getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, c);
Handler han = new Handler() {
@SuppressWarnings("deprecation")
public void handleMessage(android.os.Message msg) {
String codestr = null;
try {
codestr = Cus_UnitTools.getsmsyzm(Reg_ForgetPassword.this);
code.setText(codestr);
requestcode();
} catch (Exception e) {
Log.e("yung", "验证码提取失败:" + codestr);
}
};
};
public static String getsmsyzm(Activity c) {
Uri uri = Uri.parse("content://sms/inbox");
String[] projection = new String[] { "address", "person", "body" };
String selection = " address='" + JTPHONE + "' ";
String[] selectionArgs = new String[] {};
String sortOrder = "date desc";
@SuppressWarnings("deprecation")
Cursor cur = c.managedQuery(uri, projection, selection, selectionArgs,
sortOrder);
if(cur!=null&&cur.getCount()>0){
cur.moveToFirst();
String body = cur.getString(cur.getColumnIndex("body")).replaceAll(
"\n", " ");
cur.close();
return getyzm(body, YZMLENGTH);
}
cur.close();
return null;
}
/**
* 从短信字符窜提取验证码
* @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])");
Matcher m = p.matcher(body);
if (m.find()) {
System.out.println(m.group());
return m.group(0);
}
return null;
}
//有些验证码是纯数字的那么直接用这个就可以了
//Pattern p = Pattern.compile("(?<![0-9])([0-9]{" + YZMLENGTH+ "})(?![0-9])");
监听完成后记得getContentResolver().unregisterContentObserver(c);注销监听
这样子就可以监听到短信数据库的变化了记住还需要加入权限顺便列出短信权限
<!-- 发送短信--> <uses-permission Android:name="android.permission.SEND_SMS" /> <!-- 阅读消息 --> <uses-permission android:name="android.permission.READ_SMS" /> <!-- 写入消息 --> <uses-permission android:name="android.permission.WRITE_SMS" /> <!-- 接收消息 --> <uses-permission android:name="android.permission.RECEIVE_SMS" />
以上所述是小编给大家介绍的Android 中使用ContentObserver模式获取短信用正则自动填充验证码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# 短信正则表达式填充验证码
# contentobserver
# Android 中自定义ContentProvider与ContentObserver的使用简单实例
# Android 使用ContentObserver监听数据库内容是否更改
# Android采取ContentObserver方式自动获取验证码
# 详解Android开发中ContentObserver类的使用
# Android ContentObserver 监听短信思路详解
# 验证码
# 小编
# 就可以
# 您的
# 在此
# 给大家
# 还需要
# 这样子
# 所述
# 贴出
# 也做
# 给我留言
# 发送短信
# 感谢大家
# 六位
# 疑问请
# 有任何
# 短信内容
# 使用了
# 完成后
相关文章:
全景视频制作网站有哪些,全景图怎么做成网页?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
如何选择服务器才能高效搭建专属网站?
如何通过建站之星自助学习解决操作问题?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
网站代码制作软件有哪些,如何生成自己网站的代码?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
高防服务器租用如何选择配置与防御等级?
如何在云服务器上快速搭建个人网站?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何自定义建站之星模板颜色并下载新样式?
如何选择高效响应式自助建站源码系统?
一键网站制作软件,义乌购一件代发流程?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
公众号网站制作网页,微信公众号怎么制作?
七夕网站制作视频,七夕大促活动怎么报名?
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何制作网站标识牌,动态网站如何制作(教程)?
建站之星如何保障用户数据免受黑客入侵?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
简历在线制作网站免费,免费下载个人简历的网站是哪些?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
实惠建站价格推荐:2025年高性价比自助建站套餐解析
Python多线程使用规范_线程安全解析【教程】
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
制作网站的模板软件,网站怎么建设?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
网站app免费制作软件,能免费看各大网站视频的手机app?
h5在线制作网站电脑版下载,h5网页制作软件?
如何挑选高效建站主机与优质域名?
制作营销网站公司,淘特是干什么用的?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
如何构建满足综合性能需求的优质建站方案?
文字头像制作网站推荐软件,醒图能自动配文字吗?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
建站之星24小时客服电话如何获取?
宿州网站制作公司兴策,安徽省低保查询网站?
如何通过商城自助建站源码实现零基础高效建站?
招贴海报怎么做,什么是海报招贴?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
如何在万网自助建站中设置域名及备案?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
Android自定义listview布局实现上拉加载下拉刷新功能
建站主机服务器选型指南与性能优化方案解析
电商网站制作公司有哪些,1688网是什么意思?
代刷网站制作软件,别人代刷火车票靠谱吗?
建站主机服务器选购指南:轻量应用与VPS配置解析
模具网站制作流程,如何找模具客户?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
*请认真填写需求信息,我们会在24小时内与您取得联系。