最近研究了一下如何对Android发送短信进行监控,首先考虑到是否会有广播机制,查了一下api文档发现没有,到了网上查了半天也没用解决办法,主要问题还是Android没有提供这中监听机制,怎么办呢,诶,苦想了几天,想到了一个还算可行的方法,但是只能对系统短信进行监控,还是不能对第三方进行监控,没办法,好了下面介绍一下我的实现方法。主要是利用Android对contentProvider内容变化监听方法实现ContentObserver类,

具体如下;

package com.listener.app;import java.text.SimpleDateFormat;import java.util.Date;import android.app.Service;import android.content.ContentResolver;import android.content.Intent;import android.database.ContentObserver;import android.database.Cursor;import android.net.Uri;import android.os.Handler;import android.os.IBinder;import android.util.Log;public class SmsStatus extends Service{@Overridepublic void onCreate() {//为content://sms的数据改变注册监听器getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, new SmsObserver(new Handler()));super.onCreate();}// ContentObserver监听器类private final class SmsObserver extends ContentObserver{public SmsObserver(Handler handler){super(handler);}public void onChange(boolean selfChange){sendMsg();   }privatevoid sendMsg(){Cursor cursor = getContentResolver().query(Uri.parse("content://sms/outbox"), null, null, null, null);if (cursor.moveToFirst()){StringBuilder sb = new StringBuilder();// 获取短信的发送地址sb.append("address=").append(cursor.getString(cursor.getColumnIndex("address")));// 获取短信的标题sb.append('\n'+"subject=").append(cursor.getString(cursor.getColumnIndex("subject")));// 获取短信的内容sb.append('\n'+"body=").append(cursor.getString(cursor.getColumnIndex("body")));// 获取短信的发送时间 SimpleDateFormat dateFormat = new SimpleDateFormat(                           "yyyy-MM-dd hh:mm:ss");                   Date d = new Date(Long.parseLong(cursor.getString(cursor.getColumnIndex("date"))));                  String date = dateFormat.format(d); sb.append('\n'+"time=").append(date);Log.e("msg", "Sent SMS:" + sb.toString());}if(cursor!=null){cursor.close();cursor=null;}}@Overridepublic IBinder onBind(Intent intent) {return null;}}

以上有几点需要注意;

1,content必须为content://sms/不能改为content://sms/outbox,即系统只能对整个短信的content进行监控而不能对content中item进行监控

2,ContentObserver监听时最好放置在service类中,以确保内容为时时监听。


更多相关文章

  1. Android(安卓)自启动 后台运行 发送短信
  2. 基于android的远程视频监控系统(已开放源码)
  3. Android监听器实现(二)Broadcast方式对通话状态(来电,拨号,挂机)的
  4. Android电话监听器
  5. Android(安卓)SmsBackUp 源码
  6. android中传感器的学习
  7. 【代码】android 通过GPS获取用户地理位置并监听位置变化
  8. Android下调用收发短信邮件等
  9. Android查询短信数据库 查询联系人数据库

随机推荐

  1. 总结安卓各大版本(4.0-9.0)的区别、新特
  2. android彻底杀死当前activity和线程方法
  3. emulator:ERROR:Unable to load VM from
  4. Android View相关-View的绘制流程浅析
  5. android之getevent/sendevent/input
  6. 【转】Android 签名详解
  7. android线程间通信之handler
  8. 二.系统编译--Ubuntu14.04上搭建android
  9. Android中的Looper类&Handler &Message
  10. Android SQLite最简单demo实现(增删查改)