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

一、目标

  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>

  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 }

时间: 2024-10-12 13:26:34

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

Android实例-手机安全卫士(十八)-完成设置向导的4个UI和跳转事件

一.目标. 制作向导设置里面每一步的UI布局及点击事件控制. 1.使用自定义button背景.自定义组合控件.自定义文本样式等. 2.利用SharedPreferences对象,设置应用程序配置信息(向导设置完成后就不再进入)           二.代码实现. 1.在程序包下新建另外3个UI的类(分别为SetupWizard_ui_2.java.SetupWizard_ui_3.java.SetupWizard_ui_4.java),并在配置文件中注册Activity. 2.根据UI设计,在设

Android实例-手机安全卫士(十二)-制作输入密码对话框并设置相应点击事件

一.目标. 自定义输入密码对话框,根据输入的密码与保存着的密码进行判断. 二.代码实现. 1. 采用第十节的方法自定义一个输入密码的对话框. 2.为按钮设置点击事件,主要介绍“确认”按钮的点击事件. ①.通过TextView对象的getText()得到文本并通过toString()转成字符串再通过trim()去除空格,得到String对象的输入密码: ②.通过SharedPreferences对象的getString(String key, String defValue)获得保存着的密码,参数

Android实例-手机安全卫士(十)-自定义对话框

一.目标. 当点击“手机防盗”时弹出自定义的设置密码对话框.如果已经设置密码,则弹出自定义的输入密码对话框. 二.代码实现. 1.在layout文件夹下新建xml(取名setpwddialog.xml)文件用于设置自定义对话框的UI. 新建xml文件代码如下; 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.a

Android实例-手机安全卫士(十四)-为密码进行MD5加密

一.目标. 将设置的密码通过MD5加密后再保存. 二.代码实现. 1.在自定义工具包(com.example.mobilesafe.ui)中新增一个类(取名MD5Utils).在新建类(MD5Utils)中新建一个返回值为String类型的public的静态方法(取名mD5Encryption),传入参数为String类型(password). 2.在新建的方法(md5Encryption)中: ①.通过消息摘要器对象(MessageDigest)的getInstance(String algo

Android实例-手机安全卫士(十五)-由主界面进入手机防盗界面

一.目标 1.在主界面中通过“设置防盗密码”或者“输入防盗密码”后,对话框消失,并进入”手机防盗界面“. 2.进入是”手机防盗界面“时,根据有无完成”手机防盗设置向导“的情况进入不同的界面.若未完成,则进入向导界面,若已完成,则进入防盗界面.          二.代码实现. 1.在程序包(com.example.mobilesafe)下新建两个Activity(分别取名SecurityActivity和SetupWizard),并在配置文件(AndroidManifest.xml)中完成注册.

Android项目实战(二十九):酒店预定日期选择

原文:Android项目实战(二十九):酒店预定日期选择 先看需求效果图:              几个需求点: 1.显示当月以及下个月的日历 (可自行拓展更多月份) 2.首次点击选择"开始日期",再次点击选择"结束日期" (1).如果"开始日期" "结束日期" 相同  (2).如果"开始日期" "结束日期" 不同,且"结束日期" 晚于 "开始日期&quo

Android实例-手机安全卫士(三十)-根据指令完成相应操作一(报警音乐和GPS追踪)

一.目标 根据安全号码发送的指令完成相应的操作.                      二.代码实现 1.完成播放报警音乐操作 ①.在res文件夹下新建名为raw文件夹,并将音频文件拷贝至该文件夹下: ②.在播放报警音乐命令代码处(即SMSReceiver类中的else if("#*alarm*#".equals(body))里面),通过MediaPlayer对象的create(Context context(上下文), int resid(资源文件id))方法创建一个MediaP

Android实例-手机安全卫士(二十七)—读取联系人号码

一.目标 1.将“二十六”介绍的读取联系人的方法移植到项目中: 2.选取读取到的联系人条目,将其号码自动填入文本框中(通过Intent方式在Activity之间传递数据). 二.代码实现. 1.将读取联系人方法移植到项目中. ①.在主程序包(mobilesafe)下新建选择联系人类(SelectContactActivity),并在布局文件夹中(layout)新建”选择联系人“的布局文件(activity_select_contact.xml).布局文件各联系人信息采用ListView组件显示.

Android实例-手机安全卫士(三)-设计主页面UI

一.目标. 主界面UI如图所示: 方面是一个功能列表提示框(采用TextView),下面是功能列表(采用GridView). 二.代码实现. 1.在主界面布局文件(activity_home.xml)中增加组件.主界面布局文件(activity_home.xml)采用线性布局,上面一个TextView,根据UI设置相应属性:下面一个是GridView,通过android:numColumns属性设置该组件的列数,由于GridView还需要inflate单个布局文件,所以为其设置id. 主界面布局