2011年4月25日 星期一

BroadcastReceiver

BroadcastReceiver為android中的一個application component
用途是接收系統中的broadcast訊息
一般來說可以寫在AndroidManifest.xml中即可
但是有些系統預設的broadcast訊息必須動態的跟系統註冊broadcastReceiver才能接收
例如screen on, screen off等等
以下就是一個可接受screen on, screen off的broadcastReceiver範例

1. 建立intent filter並設定其內容, 此例中可接收之intent為
    "android.intent.action.SCREEN_ON"和"android.intent.action.SCREEN_OFF"
    至於BroadcastReceiver的class宣告在下面第2點有說明
    最後用registerReceiver(receiver, filter)向系統註冊此broadcastReceiver
public void onCreate() 
{
    // code
 
    IntentFilter filter = new IntentFilter();
    filter.addAction("android.intent.action.SCREEN_ON");
    filter.addAction("android.intent.action.SCREEN_OFF");
 
    ScreenReceiver receiver = new ScreenReceiver();
 
    registerReceiver(receiver, filter);
}

2. 建立一個inner class繼承broadcastReceiver, 並override onReceive()方法
    藉由intent.getAction()取得接收到的intent即可進行對應的動作
public class ScreenReceiver extends BroadcastReceiver
{     
    @Override
    public void onReceive(Context context, Intent intent)
    {   
        if(intent.getAction().equals("android.intent.action.SCREEN_ON"))
        {   
            // code
        }
        else if(intent.getAction().equals("android.intent.action.SCREEN_OFF"))
        {
            // code    
        }
    }
}