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的 短信软件 会拦截短信 然后终止广播 这样 就收不到短信广播 所以要注意 尚未解决 待研究。。。