1. 程式人生 > >Broadcast Receiver的靜態註冊&動態註冊

Broadcast Receiver的靜態註冊&動態註冊

Broadcast Receiver有兩種註冊方式,一是靜態註冊,一是動態註冊;二者在實現方法上不盡相同,使用場景也隨之不同;

靜態註冊的Broadcat會從application啟動開始就一直常駐監聽,直到application消亡;

動態註冊較之前者會比較靈活,可動態地在需要監聽的地方加註冊,但要注意在不需要時呼叫unregister,取消註冊。

靜態註冊實現方法:
直接在AndroidManifest.xml中註冊過濾器

<receiver android:name=".receiver.BootReceiver">
            <intent-filter
>
<action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> <intent-filter android:priority="1000" > <action android:name="android.intent.action.MEDIA_MOUNTED" /> <data android:scheme
="file" />
</intent-filter> </receiver>

然後在BootReceiver.java監聽類中處理監聽結果

public class BootReceiver extends BroadcastReceiver{
@Override
    public void onReceive(Context context, Intent intent) {

        Log.e(TAG, "onReceive:"+intent.getAction());
        // TODO Something
} }

動態註冊實現方法:

定義監聽類

BroadcastReceiver alarmReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e(TAG, intent.getAction());
        if(intent.getAction().equals("com.android.deskclock.ALARM_ALERT")) {
        //TODO

        }
    }
};

定義過濾器

IntentFilter filter = new IntentFilter();
// 鬧鐘響起時觸發com.android.deskclock.ALARM_ALERT 
filter.addAction("com.android.deskclock.ALARM_ALERT");

註冊

registerReceiver(alarmReceiver, filter);    

取消註冊

unregisterReceiver(alarmReceiver);

其間注意是否需要在AndroidManifest.xml中新增相應的監聽許可權。