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;@Overridepublic 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);


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部