淺談BroadcastReceiver的用法

最近看瞭下關於廣播方面的東西,加深瞭理解,也糾正瞭自己以前的不正確的看法。
  關於廣播有2中註冊方式,一種是在代碼中註冊,也叫動態註冊,另一種是在AndroidManifest裡面註冊,也叫靜態註冊。
  不管在哪個裡面註冊,都需要發送廣播sendBroadcast()。廣播發送的是一個Intent,intent裡面一般是action。
  如果是在代碼裡面註冊,一般在onResume()方法裡面註冊。
 @Override
     protected void onResume() {
         // TODO Auto-generated method stub
         
         myReceiver = new MyReceiver();
         IntentFilter filter = new IntentFilter();
         //向過濾器中添加action
          filter.addAction("com.android.shang");
         //註冊廣播
          registerReceiver(myReceiver, filter);
        
         Intent intent = new Intent();
         intent.setAction("com.android.xiang");
         //發送廣播
          sendBroadcast(intent);
         super.onResume();
     }
  在onPause()方法裡面要取消註冊。
1 @Override
2     protected void onPause() {
3         // TODO Auto-generated method stub
4         unregisterReceiver(myReceiver);
5         super.onPause();
6     }
  當然,也可以在xml文件中註冊:
 <receiver
         android:name=".MyBrocastReceiverTest">
         <intent-filter>
             <action    android:name="com.android.xiang"></action>
         </intent-filter>
     </receiver>
  如果發送的廣播的action已經註冊瞭,那麼在onReceive()方法中就會接收到發過來的廣播,繼而做出一些處理。 www.aiwalls.com
  你可以寫出一個內部類:
 1 class MyReceiver extends BroadcastReceiver {
 2
 3         @Override
 4         public void onReceive(Context context, Intent intent) {
 5             // TODO Auto-generated method stub
 6             //從這裡的log中可以看到是否接受到瞭廣播
 7             System.out.println("intent = " + intent);
 8         }
 9        
10     }
  當然也可以單獨寫一個類:
package com.android.TestBrocastReceiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyBrocastReceiverTest extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        System.out.println("intent = " + intent);
    }

}
  一般如果在代碼裡面註冊,就把廣播寫在代碼裡面,在xml文件中註冊就單獨寫一個類。
  註冊在代碼裡面:
 package com.android.TestBrocastReceiver;
 
 import android.app.Activity;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Bundle;
 
 public class TestBrocastReceiver extends Activity {
    
     MyReceiver myReceiver;
    
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
     }
 
     @Override
     protected void onPause() {
         // TODO Auto-generated method stub
         unregisterReceiver(myReceiver);
         super.onPause();
     }
 
     @Override
     protected void onResume() {
         // TODO Auto-generated method stub
        
         myReceiver = new MyReceiver();
         IntentFilter filter = new IntentFilter();
         //向過濾器中添加action
         filter.addAction("com.android.shang");
         //註冊廣播
         registerReceiver(myReceiver, filter);
        
         Intent intent = new Intent();
         intent.setAction("com.android.xiang");
         //發送廣播
         sendBroadcast(intent);
         super.onResume();
     }
    
     class MyReceiver extends BroadcastReceiver {
 
         @Override
         public void onReceive(Context context, Intent intent) {
             // TODO Auto-generated method stub
             //從這裡的log中可以看到是否接受到瞭廣播
             System.out.println("intent = " + intent);
         }
     }
 }
  註冊在xml文件中:
在xml文件中註冊,寫上一個廣播類,然後在activity中發送廣播就可以瞭。
有時系統會發出一些廣播,比如說時間的變化等,時間走一秒就會發一個廣播,這時我們可以監聽這個廣播,然後在接收器中做處理就可以瞭,而不需要在發廣播瞭。

摘自 wangjia55的專欄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。