您的位置:首页 > 移动开发 > Android开发

android 中从数据库读取短信验证码

2016-05-13 12:27 337 查看
最近公司的一个项目,有一个获取手机验证码并实现注册的功能,但是项目经理说是要实现验证码的自动填写,当时就开始想该如何实现,<br/>后来通过查阅书籍得知,Android中有一个ContentObserver可以自动监听数据库的变化。代码如下:


/**
*
* @author sun
* 判断当有新的短消息来之后读取短消息的内容,主要是验证短信验证码
*/
public class MainActivity extends Activity {
//收件箱
private Uri SMS_INBOX = Uri.parse("content://sms/inbox");

private EditText editText;
private MyContentObserve contentObserve;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.et);
contentObserve = new MyContentObserve(this, handler);
getContentResolver().registerContentObserver(SMS_INBOX, true,contentObserve);
}

Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
String content = (String) msg.obj;
//Toast.makeText(MainActivity.this,"回调handler",6).show();
editText.setText(content);
};
};

public String getSmsContent() {
ContentResolver cr = getContentResolver();
String[] projection = new String[] { "body","address","person"};// "_id", "address",
// "person",, "date",
String where = " date >  "
+ (System.currentTimeMillis() - 10 * 60 * 1000);
Cursor cur = cr.query(SMS_INBOX, projection, where, null, "date desc");
if (null == cur){
return "";
}
if (cur.moveToFirst()) {
String number = cur.getString(cur.getColumnIndex("address"));// 手机号
String name = cur.getString(cur.getColumnIndex("person"));// 联系人姓名列表
String body = cur.getString(cur.getColumnIndex("body"));

// 正则表达式过滤验证码
Pattern pattern = Pattern.compile("[^0-9]");
Matcher m = pattern.matcher(body);//
String  smsContent = m.replaceAll("").trim().toString();
return smsContent;
}else {
return "";
}
}

@Override
protected void onDestroy() {
super.onDestroy();
getContentResolver().unregisterContentObserver(contentObserve);
}

class MyContentObserve extends ContentObserver{
private Handler mHandler;
public MyContentObserve(Context context,Handler handler) {
super(handler);
this.mHandler = handler;
}
//当有新的短信来的时候,会自动回调此方法
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);

String smsContent = getSmsContent();
Message msg = Message.obtain();
msg.obj = smsContent;
mHandler.sendMessage(msg);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android