package com.ittianyu.mobileguard.receiver; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.media.MediaPlayer; import android.preference.PreferenceManager; import android.provider.Telephony; import android.telephony.SmsMessage; import android.text.TextUtils; import com.ittianyu.mobileguard.R; import com.ittianyu.mobileguard.constant.Constant; import com.ittianyu.mobileguard.service.GpsTraceService; import com.ittianyu.mobileguard.utils.SmsUtils; import static com.ittianyu.mobileguard.constant.Constant.SMS_ALARM; import static com.ittianyu.mobileguard.constant.Constant.SMS_GPS_TRACE; import static com.ittianyu.mobileguard.constant.Constant.SMS_REMOTE_LOCK_SCREEN; import static com.ittianyu.mobileguard.constant.Constant.SMS_REMOTE_WIPE_DATA; /** * Sms receiver. * if receive #*alarm*# #*wipe data*# #*wipe data*# #*lock screen*# #*gps*# * it will do something */ public class SmsReceiver extends BroadcastReceiver { private MediaPlayer mediaPlayer; @Override public void onReceive(Context context, Intent intent) { // get messages SmsMessage[] messages; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { messages = Telephony.Sms.Intents.getMessagesFromIntent(intent); } else { messages = SmsUtils.getMessagesFromIntent(intent); } if(null == messages) { return; } // get pref SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); // check content for (SmsMessage message: messages) { String content = message.getMessageBody(); System.out.println(message.getOriginatingAddress() + ":" + content); if(SMS_GPS_TRACE.equals(content)) {// gps trace // check config, if service is not on, skip this service if (!sp.getBoolean(Constant.KEY_CB_GPS_TRACE, false)) continue; // start service context.startService(new Intent(context, GpsTraceService.class)); // abort abortBroadcast(); } else if (content.contains(SMS_REMOTE_LOCK_SCREEN)) {// remote lock screen // check permission boolean deviceAdmin = sp.getBoolean(Constant.KEY_CB_DEVICE_ADMIN, false); boolean lockScreen = sp.getBoolean(Constant.KEY_CB_REMOTE_LOCK_SCREEN, false); // service is off if (!deviceAdmin || !lockScreen) continue; // get device policy manager DevicePolicyManager mDPM = (DevicePolicyManager)context.getSystemService(Context.DEVICE_POLICY_SERVICE); // get password int index = content.indexOf(SMS_REMOTE_LOCK_SCREEN); if(-1 != index) {// have password String password = content.substring(index + + SMS_REMOTE_LOCK_SCREEN.length()); if(!TextUtils.isEmpty(password)) { // set password mDPM.resetPassword(password, 0); } } // lock screen mDPM.lockNow(); // abort abortBroadcast(); } else if (SMS_REMOTE_WIPE_DATA.equals(content)) {// remote wipe data // check permission boolean deviceAdmin = sp.getBoolean(Constant.KEY_CB_DEVICE_ADMIN, false); boolean wipeData = sp.getBoolean(Constant.KEY_CB_REMOTE_WIPE_DATA, false); // service is off if (!deviceAdmin || !wipeData) continue; // get device policy manager DevicePolicyManager mDPM = (DevicePolicyManager)context.getSystemService(Context.DEVICE_POLICY_SERVICE); // wipe data mDPM.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE); // abort abortBroadcast(); } else if (SMS_ALARM.equals(content)) {// alarm // check permission if (!sp.getBoolean(Constant.KEY_CB_ALARM, false)) continue; // abort abortBroadcast(); if(null != mediaPlayer) return; // play alarm sound mediaPlayer = MediaPlayer.create(context, R.raw.alarm); mediaPlayer.setLooping(true); mediaPlayer.start(); } } } }