标签:
基本原理:通过ContentObserver观察者监听sms数据库的改变,当有变化时检测是否是来自指定号码的短信,如果是的话就通过正则表达式获得需要的内容,然后贴代码 (*^__^*) 嘻嘻……:
1 /** 2 * 3 * @ClassName: SmsContent 4 * @Description: 短信监听类 5 * @author guoyizhe 6 * @email gyzboy@126.com 7 * @date 2015-6-9 下午3:30:12 8 * 9 */ 10 public class SmsContent extends ContentObserver { 11 12 public static final String SMS_URI_INBOX = "content://sms/inbox"; 13 private Activity activity = null; 14 private String smsContent = ""; 15 private EditText verifyText = null; 16 private Handler handler; 17 private int SMS_CONTENT = 1; 18 19 public SmsContent(Activity activity, Handler handler, EditText verifyText) { 20 super(handler); 21 this.activity = activity; 22 this.verifyText = verifyText; 23 this.handler = handler; 24 } 25 26 @Override 27 public void onChange(boolean selfChange) { 28 super.onChange(selfChange); 29 Cursor cursor = null; 30 // 读取收件箱中指定号码的未读短信,一般只监听自己公司使用的短信通道号码,如果有多个,查询语句改为 address in (xxx,xxx)就可以了 31 cursor = activity.getContentResolver().query(Uri.parse(SMS_URI_INBOX), new String[] { "_id", "address", "body", "read" }, "address =? and read=?", 32 new String[] { "5554" ,"0" }, "date desc"); 33 if (cursor != null) {//有未读短信 34 cursor.moveToFirst(); 35 if (cursor.moveToFirst()) {//这里也是针对一条,多条的话使用while循环遍历出即可 36 String smsbody = cursor.getString(cursor.getColumnIndex("body")); 37 String regEx = "[^0-9]"; 38 Pattern p = Pattern.compile(regEx); 39 Matcher m = p.matcher(smsbody.toString()); 40 smsContent = m.replaceAll("").trim().toString(); 41 verifyText.setText(smsContent); 42 } 43 //通过handler可以处理许多其他的事务,这里只是举个栗子 44 handler.obtainMessage(SMS_CONTENT, verifyText.getText().toString()).sendToTarget(); 45 cursor.close(); 46 } 47 } 48 }
然后是主Activity:
1 /** 2 * 3 * @ClassName: MainActivity 4 * @Description: 监听到来的短信并自动填充,也可以处理一些事件 5 * @author guoyizhe 6 * @email gyzboy@126.com 7 * @date 2015-6-9 下午2:17:56 8 * 9 */ 10 public class MainActivity extends Activity { 11 private Handler handler = new Handler(){ 12 public void handleMessage(android.os.Message msg) { 13 switch(msg.what){ 14 case 1://处理短信到来后事件 15 //TODO 16 break; 17 } 18 }; 19 }; 20 21 @Override 22 protected void onCreate(Bundle savedInstanceState) { 23 super.onCreate(savedInstanceState); 24 setContentView(R.layout.activity_main); 25 EditText text = (EditText) findViewById(R.id.smsObserver); 26 SmsContent content = new SmsContent(MainActivity.this, handler, text); 27 // 注册短信变化监听 28 this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content); 29 } 30 }
标签:
原文地址:http://www.cnblogs.com/gyzboy/p/4563685.html