权限:
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
代码:
package com.wbm.app.wakeandlockdemo;
import android.app.KeyguardManager;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.os.PowerManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private PowerManager powerManager;
private PowerManager.WakeLock wakeLock;
private KeyguardManager keyguardManager;
private KeyguardManager.KeyguardLock keyguardLock;
private Handler mHandler;
private int times=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message message) {
if(message.what==1) {
Log.d("kodulf", "点亮屏幕 end time="+times);
wakeAndUnlock(true);
mHandler.sendEmptyMessageDelayed(0, 3000);
Log.d("kodulf", "点亮屏幕 end time="+times++);
}
else if(message.what==0) {
Log.d("kodulf", "变暗屏幕 end time="+times);
wakeAndUnlock(false);
mHandler.sendEmptyMessageDelayed(1, 3000);
Log.d("kodulf", "变暗屏幕 end time="+times++);
}
return false;
}
});
mHandler.sendEmptyMessage(1);
}
private void wakeAndUnlock(boolean b)
{
if(b)
{
//获取电源管理器对象
powerManager =(PowerManager) getSystemService(Context.POWER_SERVICE);
//获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是调试用的Tag
wakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");
// /**
// * 在创建了 PowerManager.WakeLock 后,有两种机制,
// * 第一种是不计数锁机制,另一种是计数锁机制。
// * 可以通过 setReferenceCounted(boolean value) 来指定,
// * 一般默认为计数机制。这两种机制的区别在于,前者无论 acquire() 了多少次,
// * 只要通过一次 release()即可解锁。而后者正真解锁是在( --count == 0 )的时候,
// * 同样当 (count == 0) 的时候才会去申请加锁。
// * 所以 PowerManager.WakeLock 的计数机制并不是正真意义上的对每次请求进行申请/释放每一把锁,
// * 它只是对同一把锁被申请/释放的次数进行了统计,然后再去操作。
// * */
// wakeLock.setReferenceCounted(true);
//点亮屏幕
wakeLock.acquire();
//得到键盘锁管理器对象
keyguardManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
keyguardLock = keyguardManager.newKeyguardLock("unLock");
//解锁
keyguardLock.disableKeyguard();
}
else
{
//锁屏
keyguardLock.reenableKeyguard();
//释放wakeLock,关灯
wakeLock.release();
}
}
}