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();
}
}
}
<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();
}
}
}
相关文章推荐
- android锁屏唤醒并解锁屏幕
- Android待机流程分析---锁屏、解锁模块
- Android待机流程分析---锁屏、解锁模块
- ANDROID锁屏后解锁屏幕宽高反过来了
- Android锁屏状态下保持后台唤醒WakeLock机制
- Android 监听屏幕锁屏,用户解锁
- Android待机流程分析---锁屏、解锁模块
- android 4.4 滑动锁屏界面,按menu键可以解锁
- android 解锁,锁屏流程
- android 锁屏后忘记密码解锁方法
- Android系统亮屏、锁屏、屏幕解锁事件(解决部分手机亮屏后未解锁即进入resume状态)
- Android自定义锁屏实现----仿正点闹钟滑屏解锁
- Android锁屏及解锁相关代码分析
- Android自定义锁屏实现----仿正点闹钟滑屏解锁
- Android 锁屏(开机/超时/Power键)解锁
- android 锁屏解锁逻辑分析
- Android开发之adb && 破解开屏图案 && 代码判断当前是否处于锁屏状态并绕过解锁页面
- android 屏幕保持唤醒 不锁屏 android.permission.WAKE_LOCK
- Android 监听屏幕锁屏,用户解锁
- android 屏幕保持唤醒 不锁屏 android.permission.WAKE_LOCK