package com.itheima.mobiesafe.receiver; import com.itheima.mobiesafe.R; import com.itheima.mobiesafe.service.GPSService; import com.itheima.mobiesafe.service.MyAdmin; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.media.MediaPlayer; import android.telephony.SmsManager; import android.telephony.SmsMessage; import android.text.TextUtils; import android.widget.Toast; public class SmsReceiver extends BroadcastReceiver { DevicePolicyManager dpm; @Override public void onReceive(Context arg0, Intent intent) { dpm = (DevicePolicyManager) arg0 .getSystemService(arg0.DEVICE_POLICY_SERVICE); System.out.println("------>受到了这个广播"); Object[] object = (Object[]) intent.getExtras().get("pdus"); //由于不一定只收到一条短信 所以遍历 for (Object pdu : object) { System.out.println("aaaaaaa"); SmsMessage sm = SmsMessage.createFromPdu((byte[]) pdu); String sender = sm.getOriginatingAddress(); String body = sm.getMessageBody(); if ("aaa".equals(body)) { // 发送aaa表示获得手机位置 System.out.println("----->或得手机位置"); Intent i = new Intent(arg0, GPSService.class); arg0.startService(i); SharedPreferences sp = arg0.getSharedPreferences("config", arg0.MODE_PRIVATE); String lastlocation = sp.getString("lastlocation", ""); if (TextUtils.isEmpty(lastlocation)) { SmsManager.getDefault().sendTextMessage(sender, null, " 正在获取....", null, null); } else { SmsManager.getDefault().sendTextMessage(sender, null, lastlocation, null, null); } abortBroadcast(); } else if ("bbb".equals(body) && "aa".equals("bb")) { // 发送bbb表示播放报警音乐 System.out.println("----->播放报警音乐"); MediaPlayer mediaPlayer = MediaPlayer.create(arg0, R.raw.aaa); mediaPlayer.setLooping(false); mediaPlayer.setVolume(1.0f, 1.0f); mediaPlayer.start(); abortBroadcast(); } else if ("ccc".equals(body)) { // 发送ccc表示远程锁屏 System.out.println("----->发送ccc表示远程锁屏"); ComponentName who = new ComponentName(arg0,MyAdmin.class); if (dpm.isAdminActive(who)) { dpm.lockNow(); }else { Toast.makeText(arg0, "未开启管理员权限", 0).show(); } abortBroadcast(); } else { System.out.println("----->啥也没收到"); } } } }
注册广播:
<receiver android:name="com.itheima.mobiesafe.receiver.SmsReceiver" > <intent-filter android:priority="1000" > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
写配置权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
在使用这个广播时 由于是 顺序广播 所以 如果手机中有 优先级1000的 短信软件 会拦截短信 然后终止广播 这样 就收不到短信广播 所以要注意 尚未解决 待研究。。。