Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android技術基礎 >> 第90章、廣播之一收聽系統廣播(從零開始學Android)

第90章、廣播之一收聽系統廣播(從零開始學Android)

編輯:Android技術基礎

廣播,這個詞我們不會陌生,不管你聽不聽,我們都懂!

收聽收音機就是一種廣播,在收音機中有多個廣播電台,每個廣播電台播放的內容都不相同。廣播電台主持人(發送方)並不在意我們(接收方)聽到廣播內容之後會如何處理。譬如我們聽到路況信息的廣播,電台廣播(發送方)告訴我們目前交通狀況如何,但它並不關心我們接收到廣播時做如何做出處理,這不是廣播應該關心的問題!
我們(接收方)可能很關心,開車選擇另一條線路;也可能我們“聽而不見”,可能這個線路擁堵與我們無關!
Android 中的廣播與之大同小異。

Android 的廣播機制

在Android 裡面有各種各樣的廣播,比如電池的使用狀態,電話的接收和短信的接收都會產生一個廣播。 

 一、設計界面

1、布局文件

打開res/layout/activity_main.xml文件。
輸入以下代碼:

[html] view plain copy  
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2.   
  3. <LinearLayout   
  4.     xmlns:android="http://schemas.android.com/apk/res/android"   
  5.     android:orientation="vertical"   
  6.     android:layout_width="fill_parent"   
  7.     android:layout_height="fill_parent">  
  8.   
  9.     <Button  
  10.         android:id="@+id/send"  
  11.         android:layout_width="wrap_content"  
  12.         android:layout_height="wrap_content"  
  13.         android:text="獲取電量" />  
  14.   
  15. </LinearLayout>  

 

二、程序文件

打開“src/com.genwoxue.contentprovider_b/MainActivity.java”文件。
然後輸入以下代碼:

[java] view plain copy  
  1. package com.genwoxue.broadcast;  
  2.   
  3.   
  4. import android.os.BatteryManager;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9. import android.widget.Toast;  
  10. import android.app.Activity;  
  11. import android.content.BroadcastReceiver;  
  12. import android.content.Context;  
  13. import android.content.Intent;  
  14. import android.content.IntentFilter;  
  15.   
  16. public class MainActivity extends Activity {  
  17.   
  18.     private Button btnSend=null;  
  19.     private BroadcastReceiverUtil receiver=null;  
  20.       
  21.     @Override  
  22.     protected void onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.activity_main);  
  25.           
  26.         btnSend=(Button)super.findViewById(R.id.send);  
  27.         btnSend.setOnClickListener(new OnClickListener(){  
  28.             @Override  
  29.             public void onClick(View v){  
  30.                 //實例化廣播接收器(接收方)  
  31.                 receiver=new BroadcastReceiverUtil();  
  32.                 //實例化廣播過濾器(只過濾電量)  
  33.                 IntentFilter filter=new IntentFilter(Intent.ACTION_BATTERY_CHANGED);   
  34.                 //注冊BroadcastReceiver:參數為接收器與過濾器  
  35.                 MainActivity.this.registerReceiver(receiver, filter);  
  36.                   
  37.             }  
  38.         });  
  39.     }  
  40.       
  41.     //聲明廣播接收類,重寫onReceive()方法用於獲取手機當前電量  
  42.     public class BroadcastReceiverUtil extends BroadcastReceiver{  
  43.         @Override  
  44.         public void onReceive(Context context,Intent intent){  
  45.                String batteryInfo="";  
  46.                 int rawlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);      //獲得當前電量   
  47.                 int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);         //獲得總電量   
  48.                 int level = -1;   
  49.                 if (rawlevel >= 0 && scale > 0) {   
  50.                     level = (rawlevel * 100) / scale;   
  51.                 }   
  52.                 batteryInfo="當前電量: " + String.valueOf(level) + "%";   
  53.                 Toast.makeText(context, batteryInfo, Toast.LENGTH_SHORT).show();  
  54.         }  
  55.     }   
  56.   
  57.     @Override  
  58.     public void onStop(){  
  59.         super.unregisterReceiver(receiver);  
  60.         super.onStop();  
  61.     }  
  62. }  

本案例中,廣播發送方是Android系統本身,它會每隔若干毫秒發送一個當前電量的廣播信息。我們僅定義了接收方與過濾器,registerReceiver()作用是告訴接收器僅“聽”(處理)與過濾器(本例自然是ACTION_BATTERY_CHANGED)有關的信息。

三、配置文件

AndroidManifest.xml采用默認即可,無需另行配置。

四、運行結果

\

你會發現,每隔一段時間,都會使用Toast自動給我們顯示一下當前電量,也能驗證廣播是不斷發送的。如果我們的應用程序不定義廣播接收方,對這些信息都是“聽”而不見的。 

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