Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> [android,20]廣播接收者

[android,20]廣播接收者

編輯:關於Android編程

廣播接收者(BroadcastReceiver)

一、什麼是廣播:

當一個事件產生的時候,就會發出一個廣播,所有注冊了這個廣播的接受者,都可以接收到這個廣播。

 

二、定義廣播接收者步驟:(短信的監聽器:接收短信的到來時發出的廣播,並獲取短信的內容)

1、自定義一個類,繼承BroadcastReceiver類。覆寫onReceive方法

public class SmsReceiver extends BroadcastReceiver {

publicvoid onReceive(Context arg0, Intent data) {

System.out.println("短信到來了");

//pdus為短信的規范,獲取短信的數組。

Object[] pdus = (Object[])data.getExtras().get("pdus");

for(Object pdu : pdus){

//獲取每一條短信對象

SmsMessage smsmessage = SmsMessage.createFromPdu((byte[]) pdu);

//短信的內容:

Stringcontent = smsmessage.getMessageBody();

System.out.println(content);

if(content.contains("fapiao")){

abortBroadcast();

}

//獲取短信的發件人

Stringsender = smsmessage.getOriginatingAddress();

System.out.println(sender);

 

if("5558".equals(sender)){

abortBroadcast();

//獲取短信的管理者

SmsManager manager =SmsManager.getDefault();

//向發送者發短信

manager.sendTextMessage(sender, null,"ni qu siba ", null, null);

}

}

 

// 終止掉這條廣播事件

}

 

2、在AndroidManifest.xml清單文件中使用receiver 元素配置廣播接收者:

 

package="cn.itcast.listener"

android:versionCode="1"

android:versionName="1.0" >

 

 

 

android:icon="@drawable/ic_launcher"

android:label="@string/app_name" >

//配置廣播接收者

 

//廣播接收者的意圖過濾器。

 

//接收短信的動作

android:name="android.provider.Telephony.SMS_RECEIVED"/>

 

 

 

 

 

 

3、注意:想要廣播接收者接收不同的事件發出的官博,就在清單文件中廣播接收者的意圖過濾器中配置相應的事件。

//配置廣播接收者

 

//廣播接收者的意圖過濾器。

//指定廣播優先級

//接收短信的動作

android:name="android.provider.Telephony.SMS_RECEIVED"/>

 

 

 

4、系統的廣播事件分為兩種類型:

有序廣播:按順序下達的廣播,可以指定廣播接收者的優先級。

優先級從-1000到1000,1000代表優先級最大。當廣播到來時,按廣播接收者的優先級高低傳播。如果在高優先級的廣播接收者中調用abortBroadcast()終止掉這條廣播事件。則該廣播就不會向優先級低的廣播接收者傳播。

例:攔截垃圾短信。

無序廣播:廣播接收者,同時接收這個廣播。

 

三、案例:為撥打的號碼增加IP號:

1、定義類:

public class OutGoingCallReceiver extendsBroadcastReceiver {

 

@Override

publicvoid onReceive(Context context, Intent arg1) {

//IP號

String ipnumber = "17951";

String number = getResultData(); //獲取撥打的號碼

System.out.println("當前的電話號碼為"+number);

//把ip號碼添加到 要撥打的號碼的前面

String newnumber = ipnumber+number;

setResultData(newnumber);//設置撥打的號碼

 

}

 

}

2、在清單文件中注冊廣播接收者:指定接收者的接收的事件和優先級:

android:icon="@drawable/ic_launcher"

android:label="@string/app_name" >

 

android:name="android.intent.action.NEW_OUTGOING_CALL"/>

-->

 

 

3、在清單文件中配置撥打電話的權限:

android:name="android.permission.PROCESS_OUTGOING_CALLS"/>

 

 

四、在代碼中動態注冊廣播接收者:

在activity類中

//創建廣播接收者

OutGoingCallReceiver receiver = newOutGoingCallReceiver();

//創建意圖過濾器

IntentFilter filter = new IntentFilter();

filter.setPriority(1000);//設置優先級

//設置意圖

filter.addAction("android.intent.action.NEW_OUTGOING_CALL");

//注冊廣播接收者

registerReceiver(receiver, filter);

 

五、廣播接收者的生命周期:

如果廣播接收者響應超過10秒,會導致主線程無響應。報出anr異常。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved