码迷,mamicode.com
首页 > 移动开发 > 详细

Android实例-手机安全卫士(二十九)-接受安全号码发送的指令

时间:2015-04-09 19:03:33      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

一、目标

  1、利用广播接收者接受安全号码发送的短信;

  2、根据短信内容完成相应指令操作(此处暂以Toast形式代替)。

 技术分享      技术分享

二、代码实现

  1、在receiver包下新建一个SMSReceiver类继承BroadcastReceiver,并在功能清单文件(AndroidManifest.xml)中的<application>内注册该receiver,名称为其全路径名称,意图过滤器(<intent-filter>)中设置优先级(android:priority)高一些(如1000),活动(<action>)为短信接受。

注册receiver的代码如下:

技术分享
1 <receiver android:name="com.example.mobilesafe.receiver.SMSReceiver">
2             <intent-filter android:priority="1000">
3                 <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
4             </intent-filter>            
5         </receiver>
View Code

 

  2、增加接受短信的权限:<uses-permission android:name="android.permission.RECEIVE_SMS"/>。

  3、在新建的SMSReceiver类中onReceive方法中实现接受短信并根据其内容完成相关操作(可参照相关模板代码)

    ①.在主代码中定义SharedPreferences对象,用于读取配置文件中的安全号码,然后在onReceive方法中通过第一个参数context(上下文)的getSharedPreferences(String name, int mode)方法获取名为“config”的配置文件,mode为0;

    ②.通过onReceive方法第二个传入参数intent的getExtras()方法获取该intent内的map集合,再通过get(String key)获取短信的集合,此处的key为“pdus”,返回值为object数组(因为短信有很多条,需要强转);

    ③.遍历获取的object数组,可采用增强for循环遍历。在循环中:

      1).通过SmsMessage(android.telephony.SmsMessage包下)对象的createFromPdu(byte[] pdu)方法获取每一条短信(SmsMessage)对象;

      2).通过短信(SmsMessage)对象的getOriginatingAddress()方法获取该条短信String类型的发件人信息;

      3).通过短信(SmsMessage)对象的getMessageBody()方法获取该条短信String类型的短信内容;

      4).获取SharedPreferences对象的getString(String key, String defValue)方法获取配置文件中键名为“security_number”所对应的值,并通过equals方法判断该值与发送人是否相等;

      5).如果相等则判断短信内容是否与对应的指令代码相等,若相等则在其中完成相应的指令操作(可用if...else if...语句或者switch语句进行判断)

        (具体指令的操作放在后续讲解,此处先用Toast替代)

      6).相关指令操作完成后调用abortBroadcast()方法关闭广播,防止用户接受短信(通过receiver的优先级priority实现)。

新建SMSReceiver类代码:

技术分享
 1 public class SMSReceiver extends BroadcastReceiver {
 2     private SharedPreferences sp;
 3                 
 4     @Override
 5     public void onReceive(Context context, Intent intent) {
 6         sp = context.getSharedPreferences("config",0);        
 7         //通过pdus方式获取所有短信组成的object数组
 8         Object[] objs = (Object[]) intent.getExtras().get("pdus");    
 9         //遍历object数组,获取里面的每一条短信内容
10         for(Object obj:objs){
11             //获取具体的每一条短信
12             SmsMessage sms = SmsMessage.createFromPdu((byte[]) obj);
13             //获取短信发件人信息
14             String sender = sms.getOriginatingAddress();
15             String body = sms.getMessageBody();
16             if(sp.getString("security_number", "").equals(sender)){
17                 if("#*location*#".equals(body)){
18                     //得到GPS位置
19                     Toast.makeText(context, "已得到GPS位置", 0).show();
20                     abortBroadcast();
21                 }else if("#*alarm*#".equals(body)){
22                     //播放报警音乐
23                     Toast.makeText(context, "已播放报警音乐", 0).show();
24                     abortBroadcast();
25                 }else if("#*wipedata*#".equals(body)){
26                     //远程销毁数据
27                     Toast.makeText(context, "已远程销毁数据", 0).show();
28                     abortBroadcast();
29                 }else if("#*lockscreen*#".equals(body)){
30                     //远程锁屏
31                     Toast.makeText(context, "已远程锁屏", 0).show();
32                     abortBroadcast();
33                 }
34             }
35         }
36     }
37 }
View Code

 

Android实例-手机安全卫士(二十九)-接受安全号码发送的指令

标签:

原文地址:http://www.cnblogs.com/Red-Shark/p/4410207.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!