手机防盗2
来源:互联网 发布:网络ip摄像头查看软件 编辑:程序博客网 时间:2024/06/02 08:43
上一篇讲到进入时的初始界面,现在我们就来说一下如何防盗吧,你肯定会说怎么防啊,防啥啊,其实我们可以这么想,你的被盗后手机卡肯定会被换吧,那我们就可以在这方面做文章,也就是检测你的手机卡跟你原先设置时的手机卡是否一致,如不一致我们就发送一条短信给安全号码,通知你的手机已被盗(当然这时候短信发送必须后台发,小偷是不知情的)
首先我们要用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编写的
- 手机防盗2
- 手机防盗
- 7、手机防盗--隐藏手机防盗标题
- 手机防盗的思路
- 笔记本手机防盗软件
- 手机防盗软件
- AndroidNote005.手机防盗软件
- Android手机防盗软件
- 手机防盗方略
- 手机防盗1
- 8、手机防盗--通过拨号进入手机防盗
- 手机防盗软件实现(源码)
- 手机防盗软件的实现
- 手机防盗软件的实现
- 6、手机防盗--密码设置
- 15、手机防盗--远程指令
- Android实现手机防盗APP
- 24手机防盗的完成
- 正确使用Android性能分析工具——TraceView
- 基于注解的字段脱敏处理
- 计算机专业该不该读研
- 关于attr的用法,自己写的一个例子。
- 题解(中秋专场)
- 手机防盗2
- 如何把百度地图应用到安卓中
- SVN服务器搭建和使用(五)
- 关于启动Aptana studio弹出failed to load the jni shared library
- HDU 5481:Desiderium(线段树)
- 网络访问请求关于封装了拼接url的方法。
- java 深拷贝
- MFC的窗口分割的设计与实现
- EventBus的使用