自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關于短信黑名單 BroadCast

移動開發(fā) Android
BroadCast Receiver顧名思義是指廣播接受者,它和時間處理機制類似,只不過事件吃力機制是程序組件級別的,而廣播時間處理機制是系統(tǒng)級別的。到目前為止我們可以使用Intent來啟動一個程序組件,我們還卡哇伊通過使用sendBroadCast ()來發(fā)起一個系統(tǒng)級別對事件廣播來傳遞信息,我們可以在你的應用程序中實現BroadCast Receiver來堅挺和相應這些廣播的Intent。

看到Android中有關Broadcast Receiver組件方面的東西,廣播被分為兩種不同的類型:“普通廣播(Normal broadcasts)”和“有序廣播(Ordered broadcasts)”。普通廣播是完全異步的,可以在同一時刻(邏輯上)被所有接收者接收到,消息傳遞的效率比較高,但缺點是:接收者不能將處理結果傳遞給下一個接收者,并且無法終止廣播Intent的傳播;然而有序廣播是按照接收者聲明的優(yōu)先級別,被接收者依次接收廣播。如:A的級別高于B,B的級別高于C,那么,廣播先傳給A,再傳給B,***傳給C 。優(yōu)先級別聲明在intent-filter元素的android:priority屬性中,數越大優(yōu)先級別越高,取值范圍:-1000到1000,優(yōu)先級別也可以調用IntentFilter對象的setPriority()進行設置 。有序廣播的接收者可以終止廣播Intent的傳播,廣播Intent的傳播一旦終止,后面的接收者就無法接收到廣播。另外,有序廣播的接收者可以將數據傳遞給下一個接收者,如:A得到廣播后,可以往它的結果對象中存入數據,當廣播傳給B時,B可以從A的結果對象中得到A存入的數據。

Context.sendBroadcast() 發(fā)送的是普通廣播,所有訂閱者都有機會獲得并進行處理。

Context.sendOrderedBroadcast() 發(fā)送的是有序廣播,系統(tǒng)會根據接收者聲明的優(yōu)先級別按順序逐個執(zhí)行接收者,前面的接收者有權終止廣播(BroadcastReceiver.abortBroadcast()),如果廣播被前面的接收者終止,后面的接收者就再也無法獲取到廣播。對于有序廣播,前面的接收者可以將數據通過setResultExtras(Bundle)方法存放進結果對象,然后傳給下一個接收者,下一個接收者通過代碼:Bundle bundle = getResultExtras(true))可以獲取上一個接收者存入在結果對象中的數據。

系統(tǒng)收到短信,發(fā)出的廣播屬于有序廣播。如果想阻止用戶收到短信,可以通過設置優(yōu)先級,讓你們自定義的接收者先獲取到廣播,然后終止廣播,這樣用戶就接收不到短信了。

因此,可以用廣播來實現一個黑名單的功能:

  1. package com.broadcastreceiver;  
  2. import android.content.BroadcastReceiver;  
  3. import android.content.Context;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.telephony.SmsMessage;  
  7. import android.util.Log;  
  8. public class FirstBroadCastReceiver extends BroadcastReceiver{  
  9.         @Override  
  10.         public void onReceive(Context context, Intent intent) {  
  11.                 // TODO Auto-generated method stub  
  12.                 if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){  
  13.                         Bundle bundle = intent.getExtras();  
  14.                         StringBuilder phoneNum = new StringBuilder();  
  15.                         //通過pdus可以獲得接收到的所有信息  
  16.                         Object[] objArray = (Object[]) bundle.get("pdus");  
  17.                         //構建短信對象array,并依據收到的對象長度來創(chuàng)建array的大小  
  18.                         SmsMessage[] messages = new SmsMessage[objArray.length];  
  19.                         for (int i = 0; i < objArray.length; i++)  
  20.                         {  
  21.                                 messages[i] = SmsMessage  
  22.                                                 .createFromPdu((byte[]) objArray[i]);  
  23.                         }  
  24.                         //將送來的短信合并自定義信息于StringBuilder中  
  25.                         for (SmsMessage currentMessage : messages)  
  26.                         {  
  27.                                 //獲得發(fā)送短信的電話號碼  
  28.                                 phoneNum.append(currentMessage.getDisplayOriginatingAddress());  
  29.                         }  
  30.                         //這里可以添加數據庫查詢語句,用來查詢發(fā)送短信的號碼是否在黑名單中  
  31.                         //注意,在onReceive()方法最長運行時間是10秒,如果超過10秒Android會認為該程序無響應  
  32.                         //所以在BroadcastReceiver里不能做一些比較耗時的操作,否側會彈出ANR(Application No Response)的對話框  
  33.                         //如果需要完成一項比較耗時的工作,應該通過發(fā)送Intent給Service,由Service來完成  
  34.                         //這里不能使用子線程來解決,因為 BroadcastReceiver的生命周期很短,子線程可能還沒有結束BroadcastReceiver就先結束了  
  35.                         //BroadcastReceiver一旦結束,此時BroadcastReceiver的所在進程很容易在系統(tǒng)需要內存時被優(yōu)先殺死,  
  36.                         //因為它屬于空進程(沒有任何活動組件的進程)。如果它的宿主進程被殺死,那么正在工作的子線程也會被殺死。  
  37.                         //所以采用子線程來解決是不可靠的。  
  38.                         if(phoneNum.toString().equals("254")){  
  39.                                 //如果在黑名單中,就終止廣播,這樣,系統(tǒng)就不會有任何提示,用戶也就收不到短信了  
  40.                                 abortBroadcast();  
  41.                                 Log.e("msg", "sucess!!");  
  42.                         }else  
  43.                               Log.e("msg","fail!");  
  44.                 }  
  45.         }  

既然要獲取短信號碼,就涉及到讀短信的權限,同時intent-filter元素的android:priority屬性表示優(yōu)先級,越大說明優(yōu)先級越高。

下面是AndroidManifest.xml代碼:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  3.       package="com.broadcastreceiver" 
  4.       android:versionCode="1" 
  5.       android:versionName="1.0"> 
  6.         <uses-permission android:name="android.permission.READ_SMS"></uses-permission> 
  7.         <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> 
  8.     <application android:icon="@drawable/icon" android:label="@string/app_name"> 
  9.         <activity android:name=".MainBroadCastReceiver" 
  10.                   android:label="@string/app_name"> 
  11.             <intent-filter> 
  12.                 <action android:name="android.intent.action.MAIN" /> 
  13.                 <category android:name="android.intent.category.LAUNCHER" /> 
  14.             </intent-filter> 
  15.         </activity> 
  16.         <receiver android:name=".FirstBroadCastReceiver"> 
  17.             <intent-filter android:priority="1000"> 
  18.                 <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> 
  19.             </intent-filter> 
  20.         </receiver> 
  21.     </application> 
  22. </manifest 

【編輯推薦】

Android線程帶給我們的好處

Android單元測試與日志輸出

Android網絡連接處理學習筆記

Android 2.2系統(tǒng)的十個實用小技巧

Android Activity和Intent機制學習筆記

責任編輯:zhaolei 來源: 開發(fā)者社區(qū)
相關推薦

2011-01-21 17:53:44

Zimbra

2015-06-04 11:11:15

2013-08-27 10:56:24

2010-11-11 13:20:41

2010-05-24 13:36:11

2009-10-29 08:39:14

Windows 7系統(tǒng)激活

2018-06-10 09:04:28

2019-07-29 08:41:33

算法黑名單ip

2011-03-18 13:14:01

2011-07-28 11:10:58

2010-11-01 09:17:21

超級黑名單騰訊QQ360安全中心

2009-05-14 09:11:49

歐盟反壟斷黑名單

2010-01-21 11:44:41

垃圾郵件實時黑名單技術

2017-07-18 09:15:23

Python Craw數據爬取

2012-11-23 17:13:59

2014-06-06 09:38:22

工信部應用軟件黑名單

2012-11-23 10:15:06

2013-02-25 09:37:38

2020-10-12 09:10:09

黑名單

2018-03-12 10:45:41

點贊
收藏

51CTO技術棧公眾號