Android執行個體-手機安全衛士(二十九)-接受安全號碼發送的指令

來源:互聯網
上載者:User

標籤:

一、目標

  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執行個體-手機安全衛士(二十九)-接受安全號碼發送的指令

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.