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

Android监听短信到来并自动填充到输入框中

2015-06-09 15:33 519 查看
基本原理:通过ContentObserver观察者监听sms数据库的改变,当有变化时检测是否是来自指定号码的短信,如果是的话就通过正则表达式获得需要的内容,然后贴代码 (*^__^*) 嘻嘻……:

/**
*
* @ClassName: SmsContent
* @Description: 短信监听类
* @author guoyizhe
* @email gyzboy@126.com
* @date 2015-6-9 下午3:30:12
*
*/
public class SmsContent extends ContentObserver {

public static final String SMS_URI_INBOX = "content://sms/inbox";
private Activity activity = null;
private String smsContent = "";
private EditText verifyText = null;
private Handler handler;
private int SMS_CONTENT = 1;

public SmsContent(Activity activity, Handler handler, EditText verifyText) {
super(handler);
this.activity = activity;
this.verifyText = verifyText;
this.handler = handler;
}

@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Cursor cursor = null;
// 读取收件箱中指定号码的未读短信,一般只监听自己公司使用的短信通道号码,如果有多个,查询语句改为 address in (xxx,xxx)就可以了
cursor = activity.getContentResolver().query(Uri.parse(SMS_URI_INBOX), new String[] { "_id", "address", "body", "read" }, "address =? and read=?",
new String[] { "5554" ,"0" }, "date desc");
if (cursor != null) {//有未读短信
cursor.moveToFirst();
if (cursor.moveToFirst()) {//这里也是针对一条,多条的话使用while循环遍历出即可
String smsbody = cursor.getString(cursor.getColumnIndex("body"));
String regEx = "[^0-9]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(smsbody.toString());
smsContent = m.replaceAll("").trim().toString();
verifyText.setText(smsContent);
}
//通过handler可以处理许多其他的事务,这里只是举个栗子
handler.obtainMessage(SMS_CONTENT, verifyText.getText().toString()).sendToTarget();
cursor.close();
}
}
}


然后是主Activity:

/**
*
* @ClassName: MainActivity
* @Description: 监听到来的短信并自动填充,也可以处理一些事件
* @author guoyizhe
* @email gyzboy@126.com
* @date 2015-6-9 下午2:17:56
*
*/
public class MainActivity extends Activity {
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch(msg.what){
case 1://处理短信到来后事件
//TODO
break;
}
};
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText text = (EditText) findViewById(R.id.smsObserver);
SmsContent content = new SmsContent(MainActivity.this, handler, text);
// 注册短信变化监听
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: