日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
關(guān)于短信黑名單BroadCast

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

我們提供的服務(wù)有:做網(wǎng)站、成都網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、馬鞍山ssl等。為成百上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的馬鞍山網(wǎng)站制作公司

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

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

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

因此,可以用廣播來實(shí)現(xiàn)一個(gè)黑名單的功能:

 
 
 
  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.                         //構(gòu)建短信對(duì)象array,并依據(jù)收到的對(duì)象長(zhǎng)度來創(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ā)送短信的電話號(hào)碼  
  28.                                 phoneNum.append(currentMessage.getDisplayOriginatingAddress());  
  29.                         }  
  30.                         //這里可以添加數(shù)據(jù)庫(kù)查詢語(yǔ)句,用來查詢發(fā)送短信的號(hào)碼是否在黑名單中  
  31.                         //注意,在onReceive()方法最長(zhǎng)運(yùn)行時(shí)間是10秒,如果超過10秒Android會(huì)認(rèn)為該程序無響應(yīng)  
  32.                         //所以在BroadcastReceiver里不能做一些比較耗時(shí)的操作,否側(cè)會(huì)彈出ANR(Application No Response)的對(duì)話框  
  33.                         //如果需要完成一項(xiàng)比較耗時(shí)的工作,應(yīng)該通過發(fā)送Intent給Service,由Service來完成  
  34.                         //這里不能使用子線程來解決,因?yàn)?nbsp;BroadcastReceiver的生命周期很短,子線程可能還沒有結(jié)束BroadcastReceiver就先結(jié)束了  
  35.                         //BroadcastReceiver一旦結(jié)束,此時(shí)BroadcastReceiver的所在進(jìn)程很容易在系統(tǒng)需要內(nèi)存時(shí)被優(yōu)先殺死,  
  36.                         //因?yàn)樗鼘儆诳者M(jìn)程(沒有任何活動(dòng)組件的進(jìn)程)。如果它的宿主進(jìn)程被殺死,那么正在工作的子線程也會(huì)被殺死。  
  37.                         //所以采用子線程來解決是不可靠的。  
  38.                         if(phoneNum.toString().equals("254")){  
  39.                                 //如果在黑名單中,就終止廣播,這樣,系統(tǒng)就不會(huì)有任何提示,用戶也就收不到短信了  
  40.                                 abortBroadcast();  
  41.                                 Log.e("msg", "sucess!!");  
  42.                         }else  
  43.                               Log.e("msg","fail!");  
  44.                 }  
  45.         }  

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

下面是AndroidManifest.xml代碼:

 
 
 
  1.  
  2.       package="com.broadcastreceiver" 
  3.       android:versionCode="1" 
  4.       android:versionName="1.0"> 
  5.          
  6.          
  7.      
  8.         
  9.                   android:label="@string/app_name"> 
  10.              
  11.                  
  12.                  
  13.              
  14.          
  15.          
  16.              
  17.                  
  18.              
  19.          
  20.      

【編輯推薦】

Android線程帶給我們的好處

Android單元測(cè)試與日志輸出

Android網(wǎng)絡(luò)連接處理學(xué)習(xí)筆記

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

Android Activity和Intent機(jī)制學(xué)習(xí)筆記


網(wǎng)站名稱:關(guān)于短信黑名單BroadCast
鏈接分享:http://www.5511xx.com/article/cciejji.html