Android灭屏、锁屏状态下如何点亮弹出界面

功能需求:如微信视频通话一样,在锁屏、灭屏状态下点亮屏幕,弹出界面

一、首先判断是否在锁屏状态下

代码判断

1:判断屏幕是亮了还是暗了

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isScreenOn();//如果为true,表示屏幕“亮”了,false则屏幕“暗”了。

2:判断是否锁屏了

KeyguardManager mKeyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
boolean flag = mKeyguardManager.inKeyguardRestrictedInputMode();//flag为true表示锁屏,flag为false表示未锁屏

广播监听开屏、锁屏、解锁状态

在系统状态改变
如:蓝牙、wifi、锁屏 状态改变的时候都会发送一条系统广播,我们接受广播判断状态即可监听这些的状态;
我们只需要创建一个广播接收器监听就行

private class ScreenBroadcastReceiver extends BroadcastReceiver {
    private String action = null;
    @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)) {
            // 接受到解锁广播
        }
    }
}

    ScreenBroadcastReceiver screen=new  ScreenBroadcastReceiver ();//实例化一下广播接收器
    IntentFilter filter = new IntentFilter();//添加一个过滤器只接受这三种广播
    filter.addAction(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    filter.addAction(Intent.ACTION_USER_PRESENT);
    registerReceiver(screen, filter);

二、点亮屏幕和弹出界面

1:点亮屏幕(需求可以不使用这部分代码)

下列代码在服务和活动中都可以使用,只能点亮屏幕,不能弹出界面,部分没有密码的手机可以直接打开锁屏

    private static PowerManager mPowerManager;
    private static PowerManager.WakeLock mWakeLock;
    
 //点亮屏幕
    @SuppressLint("InvalidWakeLockTag")
    private void wakeLock(){
        Log.i(TAG, "wakeLock:点亮屏幕30秒");
        //亮屏逻辑代码
        if (mPowerManager == null) {
            mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
        }
        if (mWakeLock == null) {
            mWakeLock = mPowerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "TAG");
        }
        boolean screenOn = mPowerManager.isScreenOn();
        if (!screenOn) {
            //屏幕会持续点亮
            mWakeLock.acquire(30*1000L /*10 minutes*/);
            //释放锁,以便10分钟后熄屏
            mWakeLock.release();
        }

    }

2:点亮屏幕弹出界面

光点亮屏幕,不弹出界面也无法实现需求,可以在活动中onCreate加入以下代码(只能在活动中,无法在服务中):

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED //锁屏显⽰
                | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD //解锁
                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON //保持屏幕长亮
                | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); //打开屏幕
 

3:在service中启动活动

弹出界面只能在活动中,但是一般后台运行都是在service中的,这样就可能需要在service中启动Activity:

Intent dialogIntent = new Intent(getApplication(), Activity.class);
                dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
               startActivity(dialogIntent);
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值