Android 应用 与 系统锁屏

有以下情景的操作
1. 应用唤醒屏幕,并且直接解除锁屏,显示应用

PowerManager的设置参数
PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。

SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯

SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯

FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度

ACQUIRE_CAUSES_WAKEUP:正常唤醒锁定实际上不打开照明。相反,它们所造成的照明留在一旦接通(例如从用户的活动)。该标志将强制屏幕和/或键盘,立即打开,当激活锁定被收购。一个典型的用法是将通知用户立即看到哪些是重要的

ON_AFTER_RELEASE:该标志被设置时,用户活动定时器将复位时激活锁定被释放时,使照明留在多一点的时间。这可用于减少闪烁如果正在唤醒锁定条件之间循环。

KeyguardManager km= (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);  
        KeyguardManager.KeyguardLock kl = km.newKeyguardLock("unLock");  
//或者newKeyguardLock("");        
        //解锁  Disable the keyguard from showing.
        kl.disableKeyguard();  
        //获取电源管理器对象  
        PowerManager pm=(PowerManager) context.getSystemService(Context.POWER_SERVICE);  
        //获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag  
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK,"bright");  
        //点亮屏幕  
        wl.acquire();  
        //释放  
        wl.release();  
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

但是有一个问题.disableKeyguard() 的作用就是关闭系统自带的锁屏服务,所以手机被唤醒后,你再按电源键想要锁屏 是锁不了的,按下home键程序在后台也锁不了。除非退出应用这样。

所以在不需要的地方,调用reenableKeyguard()方法关闭服务(即恢复系统锁屏服务时)
所以一般

 if(true){
              //获取电源管理器对象
              pm=(PowerManager) getSystemService(Context.POWER_SERVICE);
              //获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是调试用的Tag
   wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");
              //点亮屏幕
              wl.acquire();

              //得到键盘锁管理器对象
              km= (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
              kl = km.newKeyguardLock("unLock");

              //解锁
              kl.disableKeyguard();
       }
       else
       {

              //锁屏
              kl.reenableKeyguard();
              //释放wakeLock,关灯
              wl.release();

       }

在加上获取 屏幕状态

/**
     * 获取screen状态
     */
    private void getScreenState() {
        PowerManager manager = (PowerManager) mContext
                .getSystemService(Context.POWER_SERVICE);
        if (manager.isScreenOn()) {
            if (mScreenStateListener != null) {
                mScreenStateListener.onScreenOn();
            }
        } else {
            if (mScreenStateListener != null) {
                mScreenStateListener.onScreenOff();
            }
        }
    }

2
. 监听广播

    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    filter.addAction(Intent.ACTION_USER_PRESENT);
    context.registerReceiver(mScreenReceiver, filter);


@Override
    public void onReceive(Context context, Intent intent) {
        action = intent.getAction();
        if (Intent.ACTION_SCREEN_ON.equals(action)) {           
            // 开屏
        } else if (Intent.ACTION_SCREEN_OFF.equals(action)) { 
            // 锁屏
        } else if (Intent.ACTION_USER_PRESENT.equals(action)) { 
            // 解锁
        }
    }

获取

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白的泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值