android 截取验证码的两种实现方式
在进行手机验证码验证时,为了提升用户体验,实现自动截取验证填充的行式,实现这个功能有两种方法,分别是利用android的广播机制和android的ContentObserver 实现。
第一种的实现方法如下:
/**
* 监听返回的验证码信息,并自动补充如验证码输入框中 [一级方法]
*/
public BroadcastReceiver getMessageReceive = new BroadcastReceiver() {
String address;
@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG+"--BroadcastReceiver --", "进入onReceive");
String msgCode = null;
if (intent.getAction().equals(
"android.provider.Telephony.SMS_RECEIVED")) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
for (Object pdu : pdus) {
SmsMessage message = SmsMessage
.createFromPdu((byte[]) pdu);
// 获取短信的正文内容
content = message.getMessageBody().trim();
// 获取短信的发送者
address = message.getOriginatingAddress();
}
Log.v(TAG+"BroadcastReceiver address", "手机号=="
+ address);
if (address != null && address.equals("10658464")) {
String regex = "\\d*";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(content);
while (m.find()) {
if (m.group().length() == 6) {
msgCode = m.group();
}
}
Log.v(TAG+" BroadcastReceiver msgCode",
"验证码==" + msgCode);
metVerify.setText(msgCode);
}
}
}
}
};
在activity 中的oncreate方法中,需要注册这个广播:
filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
getApplicationContext().registerReceiver(getMessageReceive, filter);
这样,在接收到短信后,会发送广播,然后进行截取,但这个方法在android4.4后,部分手机就无法正常截取,因此推荐使用第二个方法。
第二个方法实现如下:
/**
* 监听短信数据库
*/
class SmsContent extends ContentObserver {
private Cursor cursor = null;
public SmsContent(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
//读取收件箱中指定号码的短信
cursor = managedQuery(Uri.parse("content://sms/inbox"), new String[]{"_id", "address", "read", "body"},
" address=? and read=?", new String[]{"10658464", "0"}, "_id desc");//按id排序,如果按date排序的话,修改手机时间后,读取的短信就不准了
if (cursor != null && cursor.getCount() > 0) {
ContentValues values = new ContentValues();
values.put("read", "1"); //修改短信为已读模式
cursor.moveToNext();
int smsbodyColumn = cursor.getColumnIndex("body");
String smsBody = cursor.getString(smsbodyColumn);
ed_mmscode.setText(getDynamicPassword(smsBody));
}
//在用managedQuery的时候,不能主动调用close()方法, 否则在Android 4.0+的系统上, 会发生崩溃
if(Build.VERSION.SDK_INT < 14) {
cursor.close();
}
}
}
种用内容观查者,在接收到短信后,发生变化时,触发onChange 方法。这种方法在测试的手机上均可拦截,故推荐大家使用这种方法,附demo 下载 :https://github.com/maliankun/intercept/archive/master.zip
转载于:https://blog.51cto.com/kunyali/1660893
android 截取验证码的两种实现方式相关推荐
- Android 圆形头像的两种实现方式
Android 圆形头像的两种实现方式 前言 这篇博客只是为了做一个记录而已,方便而后查询,核心代码都是直接采用鸿洋博客里面的代码的. 圆形头像在实际开发中实际很常见,一般来说,主要有两种实现方式: ...
- android旋转动画的两种实现方式
在android开发,我们会常常使用到旋转动画,普通情况下旋转动画有两种实现方式,一种是直接通过java代码去实现,第二种是通过配置文件实现动画.以下是两种动画的基本是用法: 纯Java代码实现: / ...
- android中资源文件的两种访问方式,Android_Android学习笔记-保存文件(Saving Files),Android设备有两种文件存储区域 - phpStudy...
Android学习笔记-保存文件(Saving Files) Android设备有两种文件存储区域: 内部存储和外部存储 ("internal" and "externa ...
- android中资源文件的两种访问方式,在android开发中进行数据存储与访问的多种方式介绍...
在android开发中进行数据存储与访问的多种方式介绍 更新时间:2013年06月07日 16:24:23 作者: 很多时候我们的软件需要对处理后的数据进行存储或再次访问,Android为数据存储 ...
- android编程fragment,详解Android中Fragment的两种创建方式
onCreate():在创建fragment时系统会调用此方法.在实现代码中,你可以初始化想要在fragment中保持的那些必要组件,当fragment处于暂停或者停止状态之后可重新启用它们. onC ...
- Android 图片旋转动画两种实现方式
说明: 让图片旋转两种方法,使用xml和代码 xml加载: xml布局:anim_rotate.xml <?xml version="1.0" encoding=" ...
- 图形验证码的两种实现方式
情形一:图形验证码跟短信验证码一起,只需要将后台提供的动态链接填到(id="img")的src中即可生成动态验证码. 然后,在需要请求接口的地方,只需把(id="imgC ...
- Android service的两种使用方式bindService和startService使用方式
服务与多线程的区别: 服务仍然是运行在主线程中,而Thread则是真正的开启了一个新的线程来执行先关操作. 那为什么要用服务呢,初步理解是服务是为了更好地管理线程.试想,当我们在某一个activity ...
- android项目两种构建方式的整合(Eclipse/idea和Android Studio)
android的两种构建方式 目前android主要有两种构建方式,一种基于ant(传统的),另一种是13年Google/IO上新推出基于Gralde的构建(Android Studio).从sdk的 ...
最新文章
- Sublime Text 3中文乱码解决方法以及安装包管理器方法
- 2017 《Java技术预备作业》
- c#调用带有自定义表结构的存储过程
- numpy在折线图上添加取值_见识matplotlib:不常见的一面,折线图
- GDCM:gdcm::UUIDGenerator的测试程序
- JS实现一个简单的计算器
- 实惠星扫地机器人不能开机_扫地机器人不能承受的重量,14kg法斗坐在上面,它旋转后死机...
- TortoiseSVN搭建本地版本库及简单操作使用
- easyui datagrid 列中的checkbox 动态绑定
- 2020家用千兆路由器哪款好_家用路由器哪个牌子好穿墙2020
- 地图制图领域使用计算机优点在于哪些方面,电子地图制图的运用与发展
- 开放数据库:中医古方数据库
- 区块链相关的关键概念
- 餐饮行业的营销策略是什么?
- 更省APP省钱密令,更省省钱密令
- Retrying connect to server: xxx.xxx.xxx.xxx:8032. Already tried 0 time(s)
- axios的post请求
- 【物联网】三大厂家NB-IOT卡对比
- 为什么要使用高彩模式
- 手机php网站开发工具,4款好用的网站开发工具推荐
热门文章
- 别让拖延毁掉你自己 | 《拖延心理学》全书解读
- Python之解决tkinter.PhotoImage不显示图片的问题 Python3
- matlab pca 主元 贡献,主元分析(PCA)原理
- Linux:inode与block,软硬链接,使用xfs相关命令备份与恢复文件和日志文件介绍
- flex 随机数产生方法
- 《Python之禅》的翻译和解释
- python math模块
- python 之 arrow
- 谁买了方舟正版火影服务器,《方舟》火影服再次被玩家恶搞!漩涡鸣人:我不要面子的吗!...
- Botler.ai为美国和加拿大推出性骚扰检测机器人