1、创建serive监听系统灭屏广播,如:ScreenService
public class ScreenService extends Service { String tag = "060_ScreenService"; @Override public IBinder onBind(Intent arg0) { return null; } @Override public void onCreate() { super.onCreate(); Log.e(tag, "onCreate"); /* 注册屏幕唤醒时的广播 */ IntentFilter mScreenOnFilter = new IntentFilter("android.intent.action.SCREEN_ON"); ScreenService.this.registerReceiver(mScreenOReceiver, mScreenOnFilter); /* 注册机器锁屏时的广播 */ IntentFilter mScreenOffFilter = new IntentFilter("android.intent.action.SCREEN_OFF"); ScreenService.this.registerReceiver(mScreenOReceiver, mScreenOffFilter); } public void onDestroy() { super.onDestroy(); ScreenService.this.unregisterReceiver(mScreenOReceiver); } /** * 锁屏的管理类叫KeyguardManager, * 通过调用其内部类KeyguardLockmKeyguardLock的对象的disableKeyguard方法可以取消系统锁屏, * newKeyguardLock的参数用于标识是谁隐藏了系统锁屏 */ private BroadcastReceiver mScreenOReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals("android.intent.action.SCREEN_ON")) { Log.e(tag, "—— SCREEN_ON ——"); } else if (action.equals("android.intent.action.SCREEN_OFF")) { Log.e(tag, "—— SCREEN_OFF ——"); screenOn(); } } }; /** * 亮屏 */ public void screenOn() { // turn on screen PowerManager mPowerManager = (PowerManager) getSystemService(POWER_SERVICE); PowerManager.WakeLock mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag"); mWakeLock.acquire(); mWakeLock.release(); } /** * 灭屏 */ private void screenOff(){ DevicePolicyManager policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); // ComponentName adminReceiver = new ComponentName(AppIdleActivity.this, ScreenOffAdminReceiver.class); // boolean admin = policyManager.isAdminActive(adminReceiver); // if (admin) { // policyManager.lockNow(); // } else { // Toast.makeText(this,"没有设备管理权限", // Toast.LENGTH_LONG).show(); // } } }
2、在配置文件中增加系统权限
+<uses-permission android:name="android.permission.WAKE_LOCK" />
3、在Application全局启动该service,全局监听。
//启动应用级的service
startService(new Intent(getApplicationContext(), ScreenService.class));