Android筆記三十三.BroadcastReceiver使用
阿新 • • 發佈:2017-05-29
mod 調用 raw ras ive ceo () 廣泛 全部
廣播是一種廣泛運用在應用程序之間傳輸信息的機制,而BroadcastReceiver是對發送出來的廣播進行過濾接收並響應的一類組件。 :用於發送普通廣播。當中intent參數表示接收該廣播的廣播接收者所須要滿足的條件,以及廣播所傳遞的數據;
(2)Context.sendOderedBroadcast(Intent intent, String receiverPermission):用於發送有序廣播。intent參數同上。receiverPermission表示接收該廣播的許可權限。
2.接收廣播
廣播的接收,則利用組件BroadcastReceiver是對發送出來的廣播進行過濾接收並響應指定的廣播。通常一個廣播能夠被訂閱了該Intnet的多個廣播接收者所接收。如同一個廣播臺。能夠被多個多位聽眾收聽一樣。
啟動BroadcastReceiver步驟:
(1)創建Intent,指定BroadcastReceiver的特征;
(2)調用Context的sendBroadcast()(發送普通廣播)或sendOrderBroadcast()(發送有序廣播)方法來發送廣播,觸發指定的BroadcasttReceiver。
為此,當應用程序發出一個廣播之後,全部匹配該Intent的BroadcastReceiver都有可能被啟動。
二、廣播的分類
1.普通廣播
是全然異步的。能夠在同一時刻(邏輯上)被全部接收者接收到,消息傳遞的效率比較高。
2.有序廣播
該廣播的接收者將按預先聲明的優先級次序接收廣播。
3.註冊廣播接收器。指定其接收哪一個廣播。
BroadcastReceiver本質上是一種全局監聽器。用於監聽系統全局的廣播消息並接收指定的廣播,因此它能夠很方便地實現系統中不同組件之間的通信。例如以下為BroadcastReceiver知識點結構:
一、發送與接收廣播 1.發送廣播 廣播的發送通過調用Context.sendBroadcast()、Context.sendOderedBroadcast()來實現: (1)Context.sendBroadcast(Intent intent)但缺點是接收者不能將處理結果傳遞給下一個接收者。而且無法終止Broadcast Intent的傳播。
有序廣播接收者能夠終止廣播的傳播(通過調用abortBroadcast()方法)。廣播的傳播一旦終止,後面的接收者就無法接收到廣播。另外,廣播的接收者能夠將數據傳遞給下一個接收者(通過setResultExtras(Bundle bundle)方法)。
三、BroadcastReceiver應用開發步驟 BroadcastReceiver自身並不實現圖形用戶界面,可是當它收到某個消息之後,能夠啟動Activity作為響應,或者通過NotificationManager提醒用戶,或者啟動Service等等。 1.創建廣播接收器。實現一個繼承於BroadcastReceiver基類的子類,並實現裏面的onReceiver()方法;
- public class MyBroadcastReceiver extends BroadcastReceiver
- {
- public void onReceiver(Context context,Intent intent){
- }
- }
3.註冊廣播接收器。指定其接收哪一個廣播。
創建完廣播接收者後。並不能立即使用,還必須為它(廣播接收者)註冊一個指定的廣播。就如同我們有了收音機後,還必須選擇收聽哪個頻道一樣。 (1)靜態註冊:是指在AndroidManifest.xml文件裏進行註冊。
- <receiver android:name=".MyBroadcastReceiver">
- <intent-filter>
- <action
- android:name = "com.jiangdongguo.android.myBroadcastReceover">
- <action/>
- </intent-filter>
- </receiver>
- MyBroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();
- IntentFilter filter = new IntentFilter("com.jiangdongguo.android.myBroadcastReceover"); //指定接收哪個廣播
- registerReceiver(BroadcastReceiver receiver。IntentFilter filter)方法進行註冊
註冊完畢後。就可以接收相應的廣播消息。一旦廣播(Broadcast)事件發生後,系統就會創建相應的BroadcastRecevier實例,並自己主動觸發它的onReceiver()方法,onReceiver()方法運行後,BroadcastReceiver的實例就會被銷毀。
三、源代碼實戰 實現:在Activity中啟動一個廣播,通過廣播接收器接收該廣播並作出響應。 1.MyBroadcastReceiver.java: 繼承於BroadcastReceiver子類-廣播接收器,用於接收指定廣播並作出對應響應。- package com.example.mybroadcast;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.widget.Toast;
- /*BroadcastReceiver子類
- * 用於接收指定發送廣播*/
- public class MyBroadcastReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context arg0, Intent arg1) {
- Toast.makeText(arg0, "我是BroadcastReceiver,我已經接收到發送的廣播。", Toast.LENGTH_SHORT).show();
- }
- }
- package com.example.mybroadcast;
- import android.app.Activity;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class MainActivity extends Activity {
- private Button sendBroad;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- /*1.廣播接收器註冊方式二:註冊一個廣播接收器*/
- MyBroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();
- IntentFilter filter = new IntentFilter("com.jiangdongguo.Android.BroadcastReceiver");
- registerReceiver(myBroadcastReceiver,filter);
- sendBroad = (Button)findViewById(R.id.send);
- sendBroad.setOnClickListener(new OnClickListener(){
- public void onClick(View v) {
- /*2.發送一個廣播,並指明其action屬性*/
- //a.指明該廣播的action屬性
- Intent intent = new Intent("com.jiangdongguo.Android.BroadcastReceiver");
- //b.發送廣播
- sendBroadcast(intent);
- }
- });
- }
- }
- <?xml version="1.0" encoding="utf-8"?
>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.mybroadcast"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="14" />
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity
- android:name=".MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <!--廣播接收器註冊方式一: 接收的哪一個廣播-->
- <!-- <receiver android:name=".MyBroadcastReceiver">
- <intent-filter >
- <action android:name="com.jiangdongguo.Android.BroadcastReceiver"/>
- </intent-filter>
- </receiver> -->
- </application>
- </manifest>
這樣就可能導致BroadcastReceiver啟動的子線程不能運行完畢。
Android筆記三十三.BroadcastReceiver使用