杨魅力
"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; }}