安卓自动获取验证码(忘记密码为例)
2015-11-12 18:28
381 查看
1.在onCreate()方法中: 注册短信监听
2.写一个匿名内部类 获取短信
3.获取六位数验证码
4.设置验证码框的值
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState, this, baseHandler);
setContentView(R.layout.ac_forget_pwd);
mContext = this;
mCodeE = (EditText) findViewById(R.id.code_edt);
SmsContent content = new SmsContent(new Handler());
// 注册短信变化监听
this.getContentResolver().registerContentObserver(
Uri.parse("content://sms/"), true, content);
}
/**
* 读取短信内部类
* @author zhangxj
*/
class SmsContent extends ContentObserver {
private Cursor cursor = null;
public SmsContent(Handler handler) {
super(handler);
}
@SuppressWarnings("deprecation")
@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[] {
"你要接收验证码的短信号码", "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);
System.out.println("smsBody = " + smsBody);
String code = smsBody.substring(22, 28);
mCodeE.setText(code);
}
if (Build.VERSION.SDK_INT < 14) {
cursor.close();}
}
}
// @Override
// protected void onDestroy() {
// // TODO Auto-generated method stub
// super.onDestroy();
// this.getContentResolver().unregisterContentObserver(content);
// }
2.写一个匿名内部类 获取短信
3.获取六位数验证码
4.设置验证码框的值
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState, this, baseHandler);
setContentView(R.layout.ac_forget_pwd);
mContext = this;
mCodeE = (EditText) findViewById(R.id.code_edt);
SmsContent content = new SmsContent(new Handler());
// 注册短信变化监听
this.getContentResolver().registerContentObserver(
Uri.parse("content://sms/"), true, content);
}
/**
* 读取短信内部类
* @author zhangxj
*/
class SmsContent extends ContentObserver {
private Cursor cursor = null;
public SmsContent(Handler handler) {
super(handler);
}
@SuppressWarnings("deprecation")
@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[] {
"你要接收验证码的短信号码", "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);
System.out.println("smsBody = " + smsBody);
String code = smsBody.substring(22, 28);
mCodeE.setText(code);
}
if (Build.VERSION.SDK_INT < 14) {
cursor.close();}
}
}
// @Override
// protected void onDestroy() {
// // TODO Auto-generated method stub
// super.onDestroy();
// this.getContentResolver().unregisterContentObserver(content);
// }
相关文章推荐
- vmware虚拟机增加磁盘空间
- [LeetCode]Integer to Roman
- Yii CModel中rules验证规则
- Linux C编程与Shell编程在开发实用工具方面的相同点总结
- loadrunner之java协议脚本编写
- Google Java编程风格指南
- Apache部署时记得关闭文件夹浏览
- 将外部程序嵌入到Qt界面中
- loadrunner之socket协议脚本编写
- centos重置root密码
- PHP 二维数组去重 保留键值
- x11vnc 对于Ubuntu15.04以后和Ubuntu14.04以前的配置和开机自启
- Coolite实现类型于QQ的消息提醒功能
- IP协议详解---Linux学习笔记
- 深入Mysql,SqlServer,Oracle主键自动增长的设置详解
- iOS开发 -- Xcode7如何创建项目启动图!?
- CentOS 6.5下安装Oracle 11g
- 结合C++和GDAL实现shapefile(shp)文件的读取
- python--getitme\setitem 支持索引与分片
- 数组和List之间的转换