android短信验证码自动填充
来源:互联网 发布:网页游戏网络加速器 编辑:程序博客网 时间:2024/05/21 22:35
项目登录注册,修改密码,或者支付时候经常会通过验证码方式,现在主流的APP也都会通过java代码来自动获取短信中的验证码并且填充到界面上------这样无疑给用户提供更为便捷的操作。
这里参考一些相关的文章我们自己创建一个广播接收器,用户接收短信变化,如果符合我们要求,那么将提取短信中的验证码来显示到界面上。
public class SmsReceiveBroadcastReceiver extends BroadcastReceiver{ private Context context; private Handler handler; private int codeLength = 0;//验证码的位数 public SmsReceiveBroadcastReceiver(Context context, Handler handler, int codeLength) { this.context = context; this.handler = handler; this.codeLength = codeLength; } @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Object[] objects = (Object[]) bundle.get("pdus"); if (objects != null) { String phone = null; StringBuffer content = new StringBuffer(); for (int i = 0; i < objects.length; i++) { SmsMessage sms = SmsMessage.createFromPdu((byte[]) objects[i]); phone = sms.getDisplayOriginatingAddress(); content.append(sms.getDisplayMessageBody()); } Log.e("smsbc", "phone:" + phone + "\ncontent:" + content.toString()); checkCodeAndSend(content.toString()); } } /** * @param content */ private void checkCodeAndSend(String content) { // 如果我们的短信提供商的短信号码是固定的话.前面可以加一个判断 // 正则表达式验证是否含有验证码 Pattern pattern = Pattern.compile("\\d{" + codeLength + "}");// compile的是规则 Matcher matcher = pattern.matcher(content);// matcher的是内容 if (matcher.find()) { String code = matcher.group(0); Log.e("smsbc", "符合规则的验证码:" + code); handler.obtainMessage(MainActivity.CODE, code).sendToTarget(); Log.e("smsbc", "收到短信的时间:" + System.currentTimeMillis()); } else { Log.e("smsbc", "么有符合规则的验证码"); } }}主页面中使用
public class MainActivity extends Activity{ public static final int CODE=6666; SmsReceiveBroadcastReceiver broadcastReceiver; private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { if (msg.what == CODE) { String code = (String) msg.obj; etCode.setText(code); Log.e("mainactivity", "界面收到短信的时间:" + System.currentTimeMillis()); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); broadcastReceiver = new SmsReceiveBroadcastReceiver(MainActivity.this, handler, 4); IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); registerReceiver(broadcastReceiver, intentFilter); } //当前页面销毁时取消注册 @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(broadcastReceiver); }}对于时间可以使用SimpleDateFormat来格式化成自己想要的样式此外权限是必不可少的<uses-permission android:name="android.permission.RECEIVE_SMS"/>//获取短信内容<uses-permission android:name="android.permission.GET_ACCOUNTS"/><uses-permission android:name="android.permission.READ_PROFILE"/><uses-permission android:name="android.permission.READ_CONTACTS"/>注意:如果手机是6.0以上的系统话要注意动态权限处理(不要忘记哦)当然也可以将targetSdkVersion改为<23也是可以的
当然还有利用观察者来实现的,但通过此种方式是直接通过源头来实现的,因此效率会高一些
demo下载
0 0
- Android自动填充短信验证码
- Android自动填充短信验证码
- Android自动填充短信验证码
- Android 短信验证码自动填充
- Android实现自动填充短信验证码
- android短信验证码自动填充
- Android短信验证码自动填充
- Android自动填充短信验证码
- Android自动填充短信验证码
- Android 自动填充短信验证码
- Android自动填充短信验证码
- 【Android短信拦截】自动填充短信验证码
- android--监听短信实现短信验证码自动填充
- 短信验证码自动填充
- 短信验证码自动填充
- Android开发(43) android 自动填充短信验证码
- Android获得短信中的验证码并自动填充
- android读取短信内容(自动填充验证码)
- WebView加载h5,h5更新了,app里一直没更新
- 字典树(1)--hdu5269(字典树基本应用)
- 非J2EE部署解决方案
- Ansible入门简介
- [leetcode] 412. Fizz Buzz 解题报告
- android短信验证码自动填充
- ld:framework not found Pods__ clang: error: linker command faild with code 1
- 运用两个栈实现队列
- php语言的核心知识点
- 阿里云存储OSS golang语言上传文件示例。
- [Server]App-Retrofit上传文件
- mssql 为查询结果增加编号
- Spring入门篇之Bean容器的初始化
- 简单学正则表达式re模块-python