您的位置:首页 > 移动开发 > Android开发

Android的解锁和唤醒,这里锁屏还没有完成,有问题

2016-08-17 19:38 423 查看
权限:

<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();

}

}

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