Android监听短信到来并自动填充到输入框中
2015-06-09 15:33
519 查看
基本原理:通过ContentObserver观察者监听sms数据库的改变,当有变化时检测是否是来自指定号码的短信,如果是的话就通过正则表达式获得需要的内容,然后贴代码 (*^__^*) 嘻嘻……:
然后是主Activity:
/** * * @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); } }
相关文章推荐
- 基于netty 的android Socket 聊天室客户端
- android 退出程序
- Android数据存储——SharedPreferences
- Android Ant 批量多渠道打包实例
- Android自己的自动化测试Monkeyrunner和用法示例
- Android中HAL如何向上层提供接口总结
- Fresco 如何在Android Studio中编译
- Android Studio上手,基于VideoView的本地文件及流媒体播放器
- android.permission
- android 开发赚钱
- Google 如何逐步牢牢控制 Android 开源系统
- Android 基于Netty的消息推送方案之对象的传递(四)
- Android 基于Netty的消息推送方案之字符串的接收和发送(三)
- Android 基于Netty的消息推送方案之概念和工作原理(二)
- Android studio 常用快捷键设置
- Android基于Netty的消息推送方案(一)
- Android崩溃处理
- Android Robot介绍
- How to use Android MediaCodec encode Camera data(YUV420sp)
- Android开发资源收集