廣播,這個詞我們不會陌生,不管你聽不聽,我們都懂!
收聽收音機就是一種廣播,在收音機中有多個廣播電台,每個廣播電台播放的內容都不相同。廣播電台主持人(發送方)並不在意我們(接收方)聽到廣播內容之後會如何處理。譬如我們聽到路況信息的廣播,電台廣播(發送方)告訴我們目前交通狀況如何,但它並不關心我們接收到廣播時做如何做出處理,這不是廣播應該關心的問題!
我們(接收方)可能很關心,開車選擇另一條線路;也可能我們“聽而不見”,可能這個線路擁堵與我們無關!
Android 中的廣播與之大同小異。
Android 的廣播機制
在Android 裡面有各種各樣的廣播,比如電池的使用狀態,電話的接收和短信的接收都會產生一個廣播,應用程序開發者也可以監聽這些廣播並做出程序邏輯的處理。下面我畫一張粗略的圖來幫助大家理解廣播的運行機制。
自創建廣播步驟:
(1)定義BroadcastReceiver廣播接收類
(2)發送廣播
(3)注冊廣播(接收器與過濾器)
一、設計界面
1、布局文件
打開res/layout/activity_main.xml文件。
輸入以下代碼:
[html] view plain copy
- <?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/send"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="發送廣播" />
-
- </LinearLayout>
二、程序文件
1、BroadcastReceiverUtil.java
打開“src/com.genwoxue.broadcastdiy/BroadcastReceiverUtil.java”文件。
然後輸入以下代碼:
[java] view plain copy
- package com.genwoxue.broadcastdiy;
-
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.widget.Toast;
-
- //聲明廣播接收類,重寫onReceive()方法用於獲取手機當前日期和時間
- public class BroadcastReceiverUtil extends BroadcastReceiver{
-
- @Override
- public void onReceive(Context context,Intent intent){
- if("com.genwoxue.action.CURRTIME".equals(intent.getAction())){
- String info=intent.getStringExtra("currdatetime");
- Toast.makeText(context, info, Toast.LENGTH_LONG).show();
- }
-
- }
- }
2、MainActivity.java
打開“src/com.genwoxue.broadcastdiy/MainActivity.java”文件。
然後輸入以下代碼:
[java] view plain copy
- package com.genwoxue.broadcastdiy;
-
- import java.text.DateFormat;
- import java.util.Date;
-
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.app.Activity;
- import android.content.Intent;
- import android.content.IntentFilter;
-
- public class MainActivity extends Activity {
-
- private Button btnSend=null;
- private BroadcastReceiverUtil util=null;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- btnSend=(Button)super.findViewById(R.id.send);
- btnSend.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v){
-
- //顯示日期,周,時間(精確到秒)
- Date now = new Date();
- DateFormat currDateTime = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL);
-
- //發送廣播,Action為“com.genwoxue.action.CURRTIME”
- Intent intent=new Intent("com.genwoxue.action.CURRTIME");
- intent.putExtra("currdatetime", currDateTime.format(now));
- MainActivity.this.sendBroadcast(intent);
-
- //實例化廣播過濾器(只過濾當前時間,其Action為"com.genwoxue.action.CURRTIME")
- IntentFilter filter=new IntentFilter("com.genwoxue.action.CURRTIME");
- //實例化廣播接收器(接收方)
- util=new BroadcastReceiverUtil();
- //注冊BroadcastReceiver:參數為接收器與過濾器
- MainActivity.this.registerReceiver(util, filter);
-
- }
- });
- }
-
- @Override
- protected void onStop(){
- super.unregisterReceiver(util);
- super.onStop();
- }
- }
本案例中,廣播發送方其Action為“com.genwoxue.action.CURRTIME”,發送廣播內容為當前系統日期和時間;廣播接收方僅“聽”(處理)與Action為“com.genwoxue.action.CURRTIME”的有關的信息,本例自然是收聽廣播的時間並顯示出來。
三、配置文件
AndroidManifest.xml采用默認即可,無需另行配置。
四、運行結果