Broadcast Receiver的靜態註冊&動態註冊
阿新 • • 發佈:2019-01-24
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中新增相應的監聽許可權。