短信广播接收者

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值