android 高兼容性的自动填充验证码工具类(四步代码搞定)
来源:互联网 发布:所以语音软件 编辑:程序博客网 时间:2024/05/16 08:22
验证码自动填充对于移动开发来说是很实用并常见的事。在4.4以前实现验证码填充可以用广播监听,获取验证码。那么4.4以后我们怎么办呢?方法还是有点,或许你以前就是用这种方法来实现的。这是一个工具类,没啥难到的,不多说。对本工具类中提到不懂的类或者字段请自行百度或Bing或Google。
本工具类使用很简单三行代码搞定一个验证码自动填充。
1、在onCreate()中实例化SmsValidateCodeUtils 类,如
mSmsValidateCodeUtils = new SmsValidateCodeUtils(this);
mSmsValidateCodeUtils.register().setOnValidateCodeListener(this).setmValidateName(getResources().getString(R.string.SmsValidateCode));
2、重写接口方法
public void resultValidateCode(String code){
// TODO
}
3、在onDestroy()中注销 mSmsValidateCodeUtils.unregister();
4、在AndroidManifest.xml中加上这个权限<uses-permission android:name="android.permission.READ_SMS"/>
是不是很简单啊!该类还可以优化,代码不是很规范。这是一个BUG我正在努力调试中……
import android.content.Context;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Handler;import android.os.Message;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * desc:自动获取短信验证码 * Created: 2016/5/23. */public class SmsValidateCodeUtils { private static final int MSG_RECEIVED_CODE = 1; private Context mContext; private SmsObserver1 mObserver; private String mValidateName = ""; private String mAddress = ""; private String mRegex_address = "\\d{4,6}"; private String mRegex_validateName = "【(([\\u4e00-\\u9fa5]+|\\w+)|([\\u4e00-\\u9fa5]+\\w+)|(\\w+[\\u4e00-\\u9fa5]+))】"; private OnValidateCodeListener mOnValidateCodeListener; private Handler mHandler; public SmsValidateCodeUtils(Context context) { this.mContext = context; } private class SmsObserver1 extends ContentObserver { public SmsObserver1(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange, Uri uri) { super.onChange(selfChange, uri); Dlog.e("DEBUG", "SMS has changed!"); Dlog.e("DEBUG", uri.toString()); String code = ""; if (uri.toString().equals("content://sms/raw")) { return; } Uri inboxUri = Uri.parse("content://sms/inbox"); Cursor c = mContext.getContentResolver().query(inboxUri, null, null, null, "date desc"); if (c != null) { if (c.moveToFirst()) { String tempaddress = c.getString(c.getColumnIndex("address")); String body = c.getString(c.getColumnIndex("body")); Dlog.e("DEBUG", "发件人为:" + tempaddress + " " + "短信内容为:" + body); Dlog.e("address ", "".equals(mAddress) + " : " + mAddress); if (!"".equals(mAddress)) { if (!tempaddress.equals(mAddress)) { return; } } Dlog.e("tempaddress ", " : " + tempaddress); Dlog.e("validateName", " : " + mValidateName); if (!"".equals(mValidateName)) { Pattern pattern = Pattern.compile(mRegex_validateName); Matcher matcher = pattern.matcher(body); if (matcher.find()) { code = matcher.group(0); Dlog.e("DEBUG", "name is " + code); } Dlog.e("validateName", " : " + mValidateName); if (!mValidateName.equals(code)) { return; } } Pattern pattern = Pattern.compile(mRegex_address); Matcher matcher = pattern.matcher(body); if (matcher.find()) { code = matcher.group(0); Dlog.e("DEBUG", "code is " + code); mHandler.obtainMessage(MSG_RECEIVED_CODE, code).sendToTarget(); } } c.close(); } } } public SmsValidateCodeUtils setOnValidateCodeListener(OnValidateCodeListener OnValidateCodeListener) { mOnValidateCodeListener = OnValidateCodeListener; return this; } public interface OnValidateCodeListener { public void resultValidateCode(String code); } public SmsValidateCodeUtils register() { mHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == MSG_RECEIVED_CODE) { String code = (String) msg.obj; Dlog.e("mHandler ", code); if (null != mOnValidateCodeListener) { mOnValidateCodeListener.resultValidateCode(code); Dlog.e("resultValidateCode ", code); } } } }; Uri uri = Uri.parse("content://sms"); mObserver = new SmsObserver1(mHandler); mContext.getContentResolver().registerContentObserver(uri, true, mObserver); return this; } public void unregister() { try { if (null != mContext) { mContext.getContentResolver().unregisterContentObserver(mObserver); mContext = null; mHandler = null; mObserver = null; mOnValidateCodeListener = null; } } catch (Exception e) { System.out.println(e.toString()); } } public String getmValidateName() { return mValidateName; } public SmsValidateCodeUtils setmValidateName(String mValidateName) { this.mValidateName = mValidateName; return this; } public String getmRegex_address() { return mRegex_address; } public SmsValidateCodeUtils setmRegex_address(String mRegex_address) { this.mRegex_address = mRegex_address; return this; } public String getmRegex_validateName() { return mRegex_validateName; } public SmsValidateCodeUtils setmRegex_validateName(String mRegex_validateName) { this.mRegex_validateName = mRegex_validateName; return this; } public String getmAddress() { return mAddress; } public SmsValidateCodeUtils setmAddress(String mAddress) { this.mAddress = mAddress; return this; }}
0 0
- android 高兼容性的自动填充验证码工具类(四步代码搞定)
- Android之注册验证码的自动填充
- Android自动填充短信验证码
- Android自动填充短信验证码
- Android实现自动填充验证码
- Android自动填充短信验证码
- Android 短信验证码自动填充
- Android实现自动填充短信验证码
- android短信验证码自动填充
- Android短信验证码自动填充
- Android自动填充短信验证码
- Android自动填充短信验证码
- Android 自动填充短信验证码
- Android自动填充短信验证码
- Android开发(43) android 自动填充短信验证码
- 四步搞定竖表变横表
- 短信验证码自动填充
- 短信验证码自动填充
- web第二课html课堂笔记
- 《编程珠玑》(第2版)第2章”:课后习题7(矩阵转置)
- multiset的插入与删除
- POJ2253-Frogger
- 【牛腩新闻发布系统】——CSS初识
- android 高兼容性的自动填充验证码工具类(四步代码搞定)
- Android学习笔记:AS 分享代码到Github
- simulink 自定义函数S-function的字符串传递方法
- c++ primer 第五版 StrVec类(p464)
- 人眼识别
- ArcGIS Server 10.2.2安装失败的一种情形和ArcGIS软件相关概念
- Mybatis框架下的表连接三种结构及实现
- 操作系统总结
- poj1860Currency Exchange(最短路)