Android初學習 - Broadcast Receiver的介紹02__Android

來源:互聯網
上載者:User

 原文地址:  http://blog.csdn.net/zuolongsnail/article/details/6450156

下面是Android Doc中關於BroadcastReceiver的概述:
①廣播接收器是一個專註於接收廣播通知資訊,並做出對應處理的組件。很多廣播是源自於系統代碼的──比如,通知時區改變、電池電量低、拍攝了一張照片或者使用者改變了語言選項。應用程式也可以進行廣播──比如說,通知其它應用程式一些資料下載完成並處於可用狀態。
②應用程式可以擁有任意數量的廣播接收器以對所有它感興趣的通知資訊予以響應。所有的接收器均繼承自BroadcastReceiver基類。
③廣播接收器沒有使用者介面。然而,它們可以啟動一個activity來響應它們收到的資訊,或者用NotificationManager來通知使用者。通知可以用很多種方式來吸引使用者的注意力──閃動背燈、震動、播放聲音等等。一般來說是在狀態列上放一個持久的表徵圖,使用者可以開啟它並擷取訊息。

 

Android中的廣播事件有兩種,一種就是系統廣播事件,比如:ACTION_BOOT_COMPLETED(系統啟動完成後觸發),ACTION_TIME_CHANGED(系統時間改變時觸發),ACTION_BATTERY_LOW(電量低時觸發)等等。另外一種是我們自訂的廣播事件。

 

廣播事件的流程
①註冊廣播事件:註冊方式有兩種,一種是靜態註冊,就是在AndroidManifest.xml檔案中定義,註冊的廣播接收器必須要繼承BroadcastReceiver;另一種是動態註冊,是在程式中使用Context.registerReceiver註冊,註冊的廣播接收器相當於一個匿名類。兩種方式都需要IntentFIlter。
②發送廣播事件:通過Context.sendBroadcast來發送,由Intent來傳遞註冊時用到的Action。
③接收廣播事件:當發送的廣播被接收器監聽到後,會調用它的onReceive()方法,並將包含訊息的Intent對象傳給它。onReceive中代碼的執行時間不要超過5s,否則Android會彈出逾時dialog。

 

下面我通過代碼示範自訂廣播事件和系統廣播事件的使用。完整代碼下載地址:android_broadcastreceiver.rar

Step1:在MainActivity的onStart方法中註冊廣播事件。靜態註冊方式是在AndroidManifest.xml檔案中。

Step2: 點擊相應按鈕後會觸發相應的方式來發送廣播訊息。

[java]  view plain  copy /**   * MainActivity   * @author zuolongsnail   *   */   public class MainActivity extends Activity {       private Button sendStaticBtn;       private Button sendDynamicBtn;       private Button sendSystemBtn;       private static final String STATICACTION = "com.byread.static";       private static final String DYNAMICACTION = "com.byread.dynamic";       // USB裝置串連       private static final String SYSTEMACTION = Intent.ACTION_POWER_CONNECTED;       @Override       public void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           setContentView(R.layout.main);           sendStaticBtn = (Button) findViewById(R.id.send_static);           sendDynamicBtn = (Button) findViewById(R.id.send_dynamic);           sendSystemBtn = (Button) findViewById(R.id.send_system);           sendStaticBtn.setOnClickListener(new MyOnClickListener());           sendDynamicBtn.setOnClickListener(new MyOnClickListener());           sendSystemBtn.setOnClickListener(new MyOnClickListener());       }       class MyOnClickListener implements OnClickListener{           @Override           public void onClick(View v) {               // 發送自訂靜態註冊廣播訊息               if(v.getId() == R.id.send_static){                   Log.e("MainActivity", "發送自訂靜態註冊廣播訊息");                   Intent intent = new Intent();                   intent.setAction(STATICACTION);                   intent.putExtra("msg", "接收靜態註冊廣播成功。");                   sendBroadcast(intent);               }               // 發送自訂動態註冊廣播訊息               else if(v.getId() == R.id.send_dynamic){                   Log.e("MainActivity", "發送自訂動態註冊廣播訊息");                   Intent intent = new Intent();                   intent.setAction(DYNAMICACTION);                   intent.putExtra("msg", "接收動態註冊廣播成功。");  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.