一、注册接收开机重启的广播接收者:用于检测开启重启时,当前sim卡和绑定的sim卡是否相同
BootCompleteReceiver 权限:RECEIVE_BOOT_COMPLETED(android4.1之前的,不配置该权限,也能收到广播事件,一个bug) 1、首先一个5554手机上绑定安全号码5556 2、由于android机在sim卡变化时,会自动重启的特性,所以可以注册一个开机重启的广播接收者,获取当前sim卡和保存的sim卡信息是否一致 a) 一个类继承BroadcastReceiver public class BootCompleteReceiver extends BroadcastReceiver b) 在清单文件中注册该广播接收者
<receiver android:name="cn.zengfansheng.mobilesafe.receiver.BootCompleteReceiver">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver> c) 然后在清单文件中声明权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 3、如果不一致,那么进行相对应的功能 a) 重启广播接收者BootCompleteReceiver
package cn.zengfansheng.mobilesafe.receiver; 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 android.util.Log; /** * 2、注册一个重启广播接收者-判断当前用户的sim卡和保存的sim是否一致,如果不一致,那么发送短信给安全号码。 * * @author hacket * */ public class BootCompleteReceiver extends BroadcastReceiver { private static final String TAG = "BootCompleteReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "重启了。。。"); SharedPreferences spf = context.getSharedPreferences("config", Context.MODE_PRIVATE); // 0、首先判断用户是否开启了手机防盗监控 boolean isProtecting = spf.getBoolean("isProtecting", false); if (isProtecting) {// 开启了手机防盗 // 1、获取保存的sim卡序列 String saveSimSerialNumber = spf.getString("simSerialNumber", ""); Log.i(TAG, "保存的安全号码:" + saveSimSerialNumber); // 2、获取当前手机sim卡的序列 TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String realNum = tm.getSimSerialNumber() + "11"; // 3、进行比较,如果不相等 if (!saveSimSerialNumber.equals(realNum)) {// saveSafenum一定不为null,因为以前为null不给存的 String saveSafenum = spf.getString("safenum", "");// 保存的安全号码 Log.i(TAG, "sim卡不一样,发送短信给安全号码:" + saveSafenum); // 4、发送短信给安全号码 SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(saveSafenum, null, "sim is changed", null, null); } } } }
二、注册一个SmsReceiver接收者,用于接收远程端发来的指令,并执行相对应的操作。 a) 清单文件配置
<receiver android:name="cn.zengfansheng.mobilesafe.receiver.SmsReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver> ------------------------------------------ b) 接收短信广播接收者SmsReceiver.java
package cn.zengfansheng.mobilesafe.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.media.MediaPlayer; import android.telephony.SmsMessage; import android.util.Log; import cn.zengfansheng.mobilesafe.R; /** * 3、接收信息的接收者 * @author hacket */ public class SmsReceiver extends BroadcastReceiver { private static final String TAG = "SmsReceiver"; @Override public void onReceive(Context context, Intent intent) { // 后台发送短信 Object[] objects = (Object[]) intent.getExtras().get("pdus"); for (Object obj : objects) { SmsMessage message = SmsMessage.createFromPdu((byte[]) obj); // String messageSender = message.getOriginatingAddress(); String messageBody = message.getMessageBody(); if ("#*location*#".equals(messageBody)) { Log.i(TAG, "返回手机位置信息..."); } else if ("#*alarm*#".equals(messageBody)) { Log.i(TAG, "播放报警音乐。。。"); //方便的api播放音乐 MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.ylzs); mediaPlayer.setLooping(true);// 循环播放 mediaPlayer.setVolume(1.0f, 1.0f); mediaPlayer.start(); abortBroadcast();// 终止广播,不被系统短信应用接收到短信 } else if ("#*wipedata*#".equals(messageBody)) { Log.i(TAG, "清除手机数据。。。"); } else if ("#*lockscreen*#".equals(messageBody)) { Log.i(TAG, "远程锁屏"); } } } } 权限:
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
|