android intent.action_screen_on,Android - 如何接收广播意图ACTION_SCREEN_ON / OFF?

8fdfef4ac5cdac6fdfd3b92a3995a08d.png

杨魅力

"android.intent.action.HEADSET_PLUG""android.intent.action.ACTION_SCREEN_ON""android.intent.action.ACTION_SCREEN_OFF"其中三个,他们无法使用Manifest注册。Android核心向他们添加了“Intent.FLAG_RECEIVER_REGISTERED_ONLY”(也许..我只检查了代码“HEADSET_PLUG”)。所以,我们应该使用“动态寄存器”。如下......private BroadcastReceiver mPowerKeyReceiver = null;private void registBroadcastReceiver() {    final IntentFilter theFilter = new IntentFilter();    /** System Defined Broadcast */    theFilter.addAction(Intent.ACTION_SCREEN_ON);    theFilter.addAction(Intent.ACTION_SCREEN_OFF);    mPowerKeyReceiver = new BroadcastReceiver() {        @Override        public void onReceive(Context context, Intent intent) {            String strAction = intent.getAction();            if (strAction.equals(Intent.ACTION_SCREEN_OFF) || strAction.equals(Intent.ACTION_SCREEN_ON)) {                // > Your playground~!            }        }    };    getApplicationContext().registerReceiver(mPowerKeyReceiver, theFilter);}private void unregisterReceiver() {    int apiLevel = Build.VERSION.SDK_INT;    if (apiLevel >= 7) {        try {            getApplicationContext().unregisterReceiver(mPowerKeyReceiver);        }        catch (IllegalArgumentException e) {            mPowerKeyReceiver = null;        }    }    else {        getApplicationContext().unregisterReceiver(mPowerKeyReceiver);        mPowerKeyReceiver = null;    }}