Android BroadcastReceiver註冊方式比較

廣播接收者註冊

清單文件註冊

廣播接收者永遠生效,除非卸載應用,或者手動停止進程

使用代碼註冊

需要廣播接收者生效時,註冊它,不需要時,反註冊它,反註冊之後,廣播接收者就失效瞭 特殊廣播接收者,必須代碼註冊
屏幕開關 電量改變

使用服務註冊廣播接收者
* Android四大組件都要在清單文件中註冊
* 廣播接收者可以使用清單文件註冊
* 一旦應用部署,廣播接收者就生效瞭,直到用戶手動停止應用或者應用被刪除
* 廣播接收者可以使用代碼註冊
* 需要廣播接收者運行時,使用代碼註冊,不需要時,可以使用代碼解除註冊
* 電量改變、屏幕開關,必須使用代碼註冊

註冊廣播接收者

//創建廣播接收者對象
receiver = new ScreenOnOffReceiver();
//通過IntentFilter對象指定廣播接收者接收什麼類型的廣播
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);

//註冊廣播接收者
registerReceiver(receiver, filter);

解除註冊廣播接收者

unregisterReceiver(receiver);

解除註冊之後,廣播接收者將失去作用

  
public class ScreenOnOFFReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();
        if(Intent.ACTION_SCREEN_ON.equals(action)){
            System.out.println("屏幕開啦啦");
        }
        else if(Intent.ACTION_SCREEN_OFF.equals(action)){
            System.out.println("屏幕關哇哇");
        }

    }

}
public class RegisterService extends Service {

    private ScreenOnOFFReceiver receiver;

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        //1.創建廣播接收者對象
        receiver = new ScreenOnOFFReceiver();
        //2.創建意圖過濾器對象
        IntentFilter filter = new IntentFilter();
        //指定接收什麼廣播
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        filter.addAction(Intent.ACTION_SCREEN_ON);
        //3.註冊廣播接收者
        registerReceiver(receiver, filter);

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        //反註冊廣播接收者
        unregisterReceiver(receiver);
    }

}
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void start(View v){
        Intent intent = new Intent(this, RegisterService.class);
        startService(intent);
    }
    public void stop(View v){
        Intent intent = new Intent(this, RegisterService.class);
        stopService(intent);
    }

}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *