1. contentobserver类 短信监听功能的类
2.监听短信变化
3.提取短信验证码
正则表达式
4.将短信验证码设置到textview显示框中去
package com.example.androidsms;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.EditText;
public class MainActivity extends Activity {
public static final int MSG_RECEIVER_CODE = 1;
private Smsobserver mobserver;
private EditText et;
private Handler mhandler = new Handler() {
public void handleMessage(Message msg) {
//收到消息 更新UI
if (msg.what == MSG_RECEIVER_CODE) {
String code = (String) msg.obj;
et.setText(code);
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mobserver = new Smsobserver(MainActivity.this, null);
// 获取uri
Uri uri = Uri.parse("content://sms");
// 绑定观察者
getContentResolver().registerContentObserver(uri, true, mobserver);
et = (EditText) findViewById(R.id.et);
}
@Override
protected void onPause() {
super.onPause();
// 解除观察者
getContentResolver().unregisterContentObserver(mobserver);
}
}
------------------------------------------------------------------------------------------------------
package com.example.androidsms;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.util.Log;
public class Smsobserver extends ContentObserver {
private Context mcontext;
private Handler mhandler;
private String code ="";
public Smsobserver(Context context, Handler handler) {
super(handler);
mcontext = context;
mhandler = handler;
}
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
Log.e("test", "sms is changed");
Log.e("test", uri.toString());
// 短信第一次改变时 不做任何处理
if (uri.toString().equals("content://sms/raw")) {
return;
}
// 读取短信箱中的uri
Uri inboxuri = Uri.parse("content://sms/inbox");
Cursor cursor = mcontext.getContentResolver().query(inboxuri, null,
null, null, "date desc");
if (cursor != null) {
if (cursor.moveToFirst()) {
String address = cursor.getString(cursor
.getColumnIndex("address"));
String body = cursor.getString(cursor.getColumnIndex("body"));
// 正则表达式 提取连续的6个数字
Pattern pattern = Pattern.compile("(\\d{6})");
Matcher matcher = pattern.matcher(body);
if (matcher.find()) {
code = matcher.group(0);
mhandler.obtainMessage(MainActivity.MSG_RECEIVER_CODE,code).sendToTarget();
}
}
cursor.close();
}
}
}