您的位置:首页 > 其它

安卓自动获取验证码(忘记密码为例)

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);

// }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: