Android 編程下兩種方式註冊廣播的區別
常駐型廣播
常駐型廣播,當你的應用程式關閉了,如果有廣播資訊來,你寫的廣播接收器同樣的能接收到,它的註冊方式就是在你應用程式的AndroidManifast.xml 中進行註冊,這種註冊方式通常又被稱作靜態註冊。這種方式可以理解為通過資訊清單檔註冊的廣播是交給作業系統去處理的。範例程式碼如下:
非常駐型廣播
非常駐型廣播,當應用程式結束了,廣播自然就沒有了,比如在 Activity 中的 onCreate 或者 onResume 中註冊廣播接收者,在 onDestory 中登出廣播接收者。這樣你的廣播接收者就一個非常駐型的了,這種註冊方式也叫動態註冊。這種方式可以理解為通過代碼註冊的廣播是和註冊者關聯在一起的。比如寫一個監聽 SDcard 狀態的廣播接收者:
package cn.sunzn.mosecurity.activity;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.os.Environment;public class SDcard extends Activity { SdcardStateChanageReceiver sdcardStateReceiver; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sdcardStateReceiver = new SdcardStateChanageReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_MEDIA_REMOVED); filter.addAction(Intent.ACTION_MEDIA_EJECT); filter.addAction(Intent.ACTION_MEDIA_MOUNTED); filter.addDataScheme("file"); registerReceiver(sdcardStateReceiver, filter); } protected void onDestroy() { unregisterReceiver(sdcardStateReceiver); } class SdcardStateChanageReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { checkSDCard(); } public void checkSDCard() { String state = Environment.getExternalStorageState(); System.out.println(state); if (state.equals(Environment.MEDIA_REMOVED) || state.equals(Environment.MEDIA_UNMOUNTED)) { System.out.println("SDCard 已卸載!"); } } }}