手机防盗2
2015-09-28 18:15
281 查看
上一篇讲到进入时的初始界面,现在我们就来说一下如何防盗吧,你肯定会说怎么防啊,防啥啊,其实我们可以这么想,你的被盗后手机卡肯定会被换吧,那我们就可以在这方面做文章,也就是检测你的手机卡跟你原先设置时的手机卡是否一致,如不一致我们就发送一条短信给安全号码,通知你的手机已被盗(当然这时候短信发送必须后台发,小偷是不知情的)
首先我们要用SharedPreferences 这个存储方法是用来存储本地你设定的那个安全号码savenumber(手机号)跟你设置时的手机卡的IMSI码subScriberId
SharedPreferences sharedPreferences=context.getSharedPreferences(“data”, MODE_WORLD_READABLE);
//IMST 手机卡的唯一信息区别
String subScriberId = tm.getSubscriberId();
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(“savenumber”,savenumber);
editor.putString(“subScriberId”,subScriberId);
也就是当你点击开始防盗时,上面的代码便被执行,好啦,信息存好了,接下来我就应该设置一个开机自动检测这存储的信息是否一致也就是重中之重的防盗啦,这里我们就需要用到一个开机检测广播啦,当然其中也需要发送短信,权限也是必须的哦
现在来看一下注册怎么注册吧AndroidManifest.xml
这是注册receiver
这是其中的BootCompleteRecever.java
这是SMSReceiverBroadcostReceiver.java
好啦,现在你就会发现我点击防盗然后开关机如果安全号码不一致我就会给我填写的手机号码发送一条短信,并且短信携带着是小偷手机卡的IMSI,在这里若寒想说一句,如有不好的地方,还望大家给我指出来,总之就是希望与大家一起学习一起进步。。。再次感谢诸位的来访
这个是手机防盗的整个源码,是使用Android studio编写的
首先我们要用SharedPreferences 这个存储方法是用来存储本地你设定的那个安全号码savenumber(手机号)跟你设置时的手机卡的IMSI码subScriberId
SharedPreferences sharedPreferences=context.getSharedPreferences(“data”, MODE_WORLD_READABLE);
//IMST 手机卡的唯一信息区别
String subScriberId = tm.getSubscriberId();
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(“savenumber”,savenumber);
editor.putString(“subScriberId”,subScriberId);
也就是当你点击开始防盗时,上面的代码便被执行,好啦,信息存好了,接下来我就应该设置一个开机自动检测这存储的信息是否一致也就是重中之重的防盗啦,这里我们就需要用到一个开机检测广播啦,当然其中也需要发送短信,权限也是必须的哦
现在来看一下注册怎么注册吧AndroidManifest.xml
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> <uses-permission android:name="android.permission.READ_SMS"></uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
这是注册receiver
<receiver android:name=".BootCompleteRecever"> <intent-filter> <!-- 开机广播 --> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <receiver android:name=".SMSReceiverBroadcostReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>
这是其中的BootCompleteRecever.java
package shuo.myapplication; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.telephony.SmsManager; import android.telephony.TelephonyManager; import java.util.List; /** * Created by 家铄 on 2015/9/5. * QQ1466181491 */ public class BootCompleteRecever extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { SharedPreferences sp = context.getSharedPreferences("data",context.MODE_WORLD_READABLE); TelephonyManager tm = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE); boolean isstart = sp.getBoolean("start",false); if(!isstart){ return; } String subscriberId = tm.getSubscriberId(); String savesubscriberId = sp.getString("subScriberId", ""); String savenumber = sp.getString("savenumber",""); if(savesubscriberId .equals(subscriberId)){ return; } SmsManager manager = SmsManager.getDefault(); //如果短信内容过长会被分割成好几条发送 List<String> message = manager.divideMessage("手机IMSI码为"+savesubscriberId+"的手机,SIM已被更换,更换的IMSI码为"+subscriberId); for(String msg :message){ manager.sendTextMessage(savenumber,null,msg,null,null); } } } }
这是SMSReceiverBroadcostReceiver.java
package shuo.myapplication; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.database.ContentObserver; import android.telephony.SmsManager; import android.telephony.SmsMessage; import java.util.List; /** * Created by 家铄 on 2015/9/6.、 * QQ1466181491 * 当短信来时 发送一条广播 */ public class SMSReceiverBroadcostReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { SharedPreferences sp = context.getSharedPreferences("data", Context.MODE_WORLD_READABLE); boolean isstart = sp.getBoolean("start", false); String savePhoneNumber = sp.getString("savenumber",""); if(isstart){ //短信的形式是pdus的格式 Object[] object = (Object[]) intent.getSerializableExtra("pdus"); //一条短信是有一个byte[]类型的数组构成的 所以当有多条短信的时候就是一个二维数组啦 byte[][] pdus = new byte[object.length][]; //所有的短信会放到Pdus里面 for(int i = 0 ;i< pdus.length ; i++){ pdus[i] = (byte[]) object[i]; } //没一条短信就是一个SmsMessage SmsMessage[] megs = new SmsMessage[object.length]; for(int i = 0; i< pdus.length ; i++){ megs[i] = SmsMessage.createFromPdu(pdus[i]); } for(int i = 0; i<megs.length ; i++){ String oriAdress = megs[i].getDisplayOriginatingAddress(); //获取目标地址 手机号 // String body = megs[i].getDisplayMessageBody(); //获取短信内容 //通过发送敏感信息 如果跟安全号码匹配 然后被盗手机自动获取重要信息发送给安全号码 例如,自己的位置等 if(oriAdress.trim().equals(savePhoneNumber)){ String body = megs[i].getDisplayMessageBody(); if(body.contains("发送的敏感词语")){ SmsManager manager = SmsManager.getDefault(); List<String> message = manager.divideMessage("发送给安全号码的重要信息"); for(String msg :message){ manager.sendTextMessage(savePhoneNumber,null,msg ,null,null); } } } } } } }
好啦,现在你就会发现我点击防盗然后开关机如果安全号码不一致我就会给我填写的手机号码发送一条短信,并且短信携带着是小偷手机卡的IMSI,在这里若寒想说一句,如有不好的地方,还望大家给我指出来,总之就是希望与大家一起学习一起进步。。。再次感谢诸位的来访
这个是手机防盗的整个源码,是使用Android studio编写的
相关文章推荐
- Java垃圾回收机制
- scala VS python2 (linux or shell)
- Linux_屏蔽360、scanv、QQ管家等IP扫描
- Linux系统--Linux的Grub应用
- 正确使用Android性能分析工具——TraceView
- C#的几种压缩文件方法
- C#: .net序列化及反序列化 [XmlElement(“节点名称”)] [XmlAttribute(“节点属性”)] (下篇)
- mogilefs安装配置详解
- FMDB数据库升级增加表字段
- 计算机专业该不该读研
- C#: .net序列化及反序列化 [XmlElement(“节点名称”)] [XmlAttribute(“节点属性”)] (上篇)
- Nginx -- Rewrite
- java之路
- UVA 1025 A Spy in the Metro
- 地震波的种类 gif动画演示
- Angular JS 学习笔记(自定义服务:factory,Promise 模式异步请求查询:$http,过滤器用法filter,指令:directive)
- JQuery拖拽排序
- Java @override报错的解决方法
- @修饰符--python中的装饰器
- windows网络联接问题