最近做注册的时候看到很多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 监听短信思路详解
# 验证码
# 小编
# 就可以
# 您的
# 在此
# 给大家
# 还需要
# 这样子
# 所述
# 贴出
# 也做
# 给我留言
# 发送短信
# 感谢大家
# 六位
# 疑问请
# 有任何
# 短信内容
# 使用了
# 完成后
相关文章:
如何自定义建站之星模板颜色并下载新样式?
Python lxml的etree和ElementTree有什么区别
如何正确选择百度移动适配建站域名?
北京网站制作网页,网站升级改版需要多久?
潮流网站制作头像软件下载,适合母子的网名有哪些?
高端企业智能建站程序:SEO优化与响应式模板定制开发
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
北京的网站制作公司有哪些,哪个视频网站最好?
PHP 500报错的快速解决方法
建站主机核心功能解析:服务器选择与网站搭建流程指南
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
如何注册花生壳免费域名并搭建个人网站?
代刷网站制作软件,别人代刷火车票靠谱吗?
如何续费美橙建站之星域名及服务?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
建站DNS解析失败?如何正确配置域名服务器?
如何快速生成橙子建站落地页链接?
建站之星后台管理如何实现高效配置?
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何通过宝塔面板实现本地网站访问?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
网站制作公司排行榜,抖音怎样做个人官方网站
南宁网站建设制作定制,南宁网站建设可以定制吗?
建站之星伪静态规则如何设置?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
常州企业网站制作公司,全国继续教育网怎么登录?
浅谈Javascript中的Label语句
建站之星伪静态规则如何正确配置?
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何在Windows环境下新建FTP站点并设置权限?
如何在Windows虚拟主机上快速搭建网站?
c# await 一个已经完成的Task会发生什么
如何通过虚拟主机空间快速建站?
网站图片在线制作软件,怎么在图片上做链接?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
北京制作网站的公司,北京铁路集团官方网站?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
如何通过远程VPS快速搭建个人网站?
,网页ppt怎么弄成自己的ppt?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
如何通过万网虚拟主机快速搭建网站?
如何在万网开始建站?分步指南解析
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
平台云上自主建站:模板化设计与智能工具打造高效网站
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
css网站制作参考文献有哪些,易聊怎么注册?
网站制作服务平台,有什么网站可以发布本地服务信息?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
网站制作公司,橙子建站是合法的吗?
nginx修改上传文件大小限制的方法
*请认真填写需求信息,我们会在24小时内与您取得联系。