BraodcastReceiver(廣播接收器)是為了實現系統廣播而提供的一種組件,它和事件處理機制類似,但是事件處理機制是程序組件級別的,而廣播事件處理機制是系統級別的。比如,我們可以發出一種廣播來測試手機電量的變化,這時候就可以定義一個BraodcastReceiver來接受廣播,當手機電量較低時提示用戶。我們既可以用Intent來啟動一個組件,也可以用sendBroadcast()方法發起一個系統級別的事件廣播來傳遞消息。我們同樣可以在自己的應用程序中實現BroadcastReceiver來監聽和響應廣播的Intent。
在程序中使用BraodcastReceiver是比較簡單的。首先要定義一個類繼承BraodcastReceiver,並且覆蓋onReceiver()方法來響應事件。然後注冊在程序中BraodcastReceiver。最後構建Intent對象調用sendBroadcast()方法將廣播發出。
二.BroadcastReceiver的注冊方式
1.靜態注冊方式
靜態注冊方式是在AndroidManifest.xml的application裡面定義receiver並設置要接收的action。靜態注冊方式的特點:不管改應用程序是否處於活動狀態,都會進行監聽,比如某個程序時監聽 內存 的使用情況的,當在手機上安裝好後,不管改應用程序是處於什麼狀態,都會執行改監聽方法中的內容。
下面是具體的例子:
MainActivity.java
- package com.android.broadcast;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class MainActivity extends Activity{
- //定義action常量
- protected static final String ACTION = "com.android.broadcast.RECEIVER_ACTION";
- //定義Button對象
- private Button btnBroadcast;
- @Override
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btnBroadcast=(Button)findViewById(R.id.btnBroadcast);
- //為按鈕設置單擊監聽器
- btnBroadcast.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v){
- //實例化Intent
- Intent intent=new Intent();
- //設置Intent的action屬性
- intent.setAction(ACTION);
- //發出廣播
- sendBroadcast(intent);
- }
- });
- }
- }
在“com.android.broadcast”包中定義一個MyReceiver類,繼承於BroadcastReceiver,覆蓋onReceive()方法。
MyReceiver.java
- package com.android.broadcast;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.util.Log;
- public class MyReceiver extends BroadcastReceiver{
- //定義日志標簽
- private static final String TAG = "Test";
- @Override
- public void onReceive(Context context, Intent intent){
- //輸出日志信息
- Log.i(TAG, "MyReceiver onReceive--->");
- }
- }
main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <Button
- android:id="@+id/btnBroadcast"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="發送Broadcast"
- />
- </LinearLayout>
在AndroidManifest.xml配置文件中16~20行聲明receiver
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.broadcast"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdk android:minSdkVersion="10" />
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <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="MyReceiver">
- <intent-filter>
- <action android:name="com.android.broadcast.RECEIVER_ACTION"/>
- </intent-filter>
- </receiver>
- </application>
- </manifest>
效果圖:
650) this.width=650;" height=132>
當我們點擊650) this.width=650;" height=120>按鈕的時候,程序會調用onReceive()方法,LogCat輸出信息如下:
650) this.width=650;" height=120>