随着Android版本的不断更新,在4.0以上使用广播接收器已经监听不到短信了

还是使用ContentObserver来监听


SmsContentObserver:

package observer;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.os.Message;import android.support.v4.content.CursorLoader;import android.util.Log;public class SmsContentObserver extends ContentObserver {/**收到短信时Message的what值*/public static final int MESSAGE_WHAT_SMS_RECEIVED = 0x01;/**SMS收件箱的URI*/public static final String SMS_URI_INBOX = "content://sms/inbox";private Context context = null;private Handler handler;public SmsContentObserver(Context context, Handler handler) {super(handler);this.context = context;this.handler = handler;}@Overridepublic void onChange(boolean selfChange) {super.onChange(selfChange);Cursor cursor = null;// 光标// 读取收件箱中指定号码的短信// cursor = context.managedQuery(Uri.parse(SMS_URI_INBOX), new String[]// {// "_id", "address", "body", "read" }, "address=? and read=?",// new String[] { "10086", "0" }, "date desc");//read=0 未读短信CursorLoader loader = new CursorLoader(context,Uri.parse(SMS_URI_INBOX), new String[] {"_id", "address", "body", "read" }, "read=?",new String[]{"0"}, "date desc");cursor = loader.loadInBackground();if (cursor != null) {// 如果短信为未读模式cursor.moveToFirst();if (cursor.moveToFirst()) {String smsbody = cursor.getString(cursor.getColumnIndex("body"));Log.i("info","短信内容:" + smsbody);String regEx = "[^0-9]";Pattern p = Pattern.compile(regEx);Matcher m = p.matcher(smsbody.toString());String smsContent = m.replaceAll("").trim().toString();Message msg = Message.obtain();msg.obj = smsContent;msg.what = MESSAGE_WHAT_SMS_RECEIVED;handler.sendMessage(msg);}}}}

使用方法-在需要的地方添加如下代码:

Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case SmsContentObserver.MESSAGE_WHAT_SMS_RECEIVED:String smsContent = msg.obj.toString();textView.setText(smsContent);break;default:break;}}};SmsContentObserver content = new SmsContentObserver(this, handler);// 注册短信变化监听this.getContentResolver().registerContentObserver(Uri.parse(SmsContentObserver.SMS_URI_INBOX), true, content);




更多相关文章

  1. Android中简单的电话管理与短信管理App编写实例
  2. android广播的两种方式!
  3. Android(安卓)用Intent调用系统中经常被用到的组件
  4. android:app接收adb发送的命令并显示
  5. android安全问题(七) 抢先接收广播 - 内因篇之广播发送流程
  6. Android 学习之那些年我们遇到的BUG2:Android 8.0 自定义广播接收
  7. Android 开发之短信的收发及在android模拟器之间实践(一)

随机推荐

  1. python使用协程并发
  2. python文件流
  3. 利用Syslog Watcher在windows下部署syslo
  4. FNV哈希算法
  5. Python基础—10-常用模块:time,calendar,dat
  6. ASM重命名包含OCR/vote file的磁盘组
  7. .NetCore实践篇:分布式监控Zipkin持久化之
  8. Oracle 12c、18c、19c中的MGMTDB(下)
  9. Ubuntu 安装yii2 advanced版 遇到的坑
  10. RHEL7 或CentOS7配置共享存储--使用iSCSI