您的位置:首页 > 其它

PowerManager.WakeLock请求锁时强制打开Screen和keyboardlight导致按Power键,系统也不会进Sleep问题!

2012-07-25 15:26 429 查看

写一个Activity启动该服务即可,用一个线程开启服务,要是黑屏的状态下启动才有效果。主要代码如下:

/获取系统服务

KeyguardManager mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);

//初始化键盘锁,可以锁定或解开键盘锁

KeyguardLock mKeyguardLock = mKeyguardManager.newKeyguardLock("");

mKeyguardLock.disableKeyguard();

//获取电源的服务

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

//点亮亮屏

WakeLock wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");

ACQUIRE_CAUSES_WAKEUP:一旦有请求锁时强制打开Screen和keyboardlight ON_AFTER_RELEASE:在释放锁时resetactivity timer 如果申请了partialwakelock,那么即使按Power键,系统也不会进Sleep,如Music播放时 如果申请了其它的wakelocks,按Power键,系统还是会进Sleep。此时要怎么解决呢?个人建议可以在启动Service时,注册一个广播,广播的onReceive方法中通过ComponentName类跳转到一个Activity,让这个Activity在锁屏界面上方提醒(点亮屏幕)!

onReceive方法主要代码://FILE_PACKAGE变量为跳转Activity的包名,FILE_PACKAGE_CLASS变量为跳转Activity的类名

Intent intent = new Intent();

ComponentName cn = new ComponentName(FILE_PACKAGE,FILE_PACKAGE_CLASS );

intent.setComponent(cn);

startActivity(intent);

Activity中的主要代码:
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();

winParams.flags |= (WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD

| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED

| WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON

| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

private void acquireWakeLock() {

if (mWakelock == null) {

Log.i(TAG, "Activity begin start ");

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

mWakelock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, this.getClass().getCanonicalName());

mWakelock.acquire();

}

}



private void releaseWakeLock() {

if (mWakelock != null && mWakelock.isHeld()) {

mWakelock.release();

mWakelock = null;

}

}


@Override

protected void onResume() {

super.onResume();

acquireWakeLock();

}

@Override

protected void onDestroy() {

super.onDestroy();

}

@Override

protected void onPause() {

super.onPause();

......

releaseWakeLock();

}

@Override

protected void onStop() {

super.onStop();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: