Android判断屏幕锁屏状态

本文详细介绍了如何在Android应用中检测屏幕的锁屏状态,包括使用Java和Kotlin两种方式。通过监听设备的电源管理和屏幕事件,实时获取屏幕是否锁定,为你的应用提供智能化的交互体验。
package com.demo

import android.app.KeyguardManager
import android.content.Context
import android.os.*
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatButton
import java.lang.ref.WeakReference
import android.os.Looper


class MainActivity : AppCompatActivity() {

    private val mMyHandler = Handler(Looper.getMainLooper())


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        findViewById<AppCompatButton>(R.id.lockBtn).setOnClickListener {
            mTimeCounterRunnable.run()

        }
    }

    private fun doTask() {
        val lockStatus = getSystemService(UserManager::class.java).isUserUnlocked
        Log.i("YYC", "lockStatus = $lockStatus")

        //屏幕是否亮屏:
        val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
        //true为打开,false为关闭
        val ifOpen = powerManager.isScreenOn
        Log.i("YYC", "屏幕是否亮屏,ifOpen = $ifOpen")

        //屏幕是否解锁:
        val mKeyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
        val flag = mKeyguardManager.inKeyguardRestrictedInputMode()
        //当前的屏幕锁有五种设置,分别是没有设置屏幕锁,滑动解锁,图案解锁,PIN码解锁,密码解锁。
        //如果没有设置屏幕锁,返回值会一直为FALSE。如果用户设置了屏幕锁(包括后四种锁中的任何一种),屏幕不亮时返回TRUE,
        // 屏幕亮时,解锁前返回TRUE,解锁后返回FALSE。
        Log.i("YYC", "屏幕是否解锁: = $flag")
        Log.i("YYC", "-------------------------------------------")

    }

    private  fun  doTask2(){
        val screenStatus = getScreenStatus()
        Log.i("YYC", "设备是否解锁: = $screenStatus")
        Log.i("YYC", "-------------------------------------------")
    }

    /**
     *
     */
    private fun getScreenStatus(): Boolean {
        //屏幕是否亮屏:
        val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
        //true为打开,false为关闭
        val ifOpen = powerManager.isScreenOn
        Log.i("YYC", "屏幕是否亮屏,ifOpen = $ifOpen")

        if(!ifOpen){
            return false
        }
        //屏幕是否解锁:
        //当前的屏幕锁有五种设置,分别是没有设置屏幕锁,滑动解锁,图案解锁,PIN码解锁,密码解锁。
        //如果没有设置屏幕锁,返回值会一直为FALSE。
        // 如果用户设置了屏幕锁(包括后四种锁中的任何一种),屏幕不亮时返回TRUE,
        // 屏幕亮时,解锁前返回TRUE,解锁后返回FALSE。
        val mKeyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
        val flag = mKeyguardManager.inKeyguardRestrictedInputMode()
        Log.i("YYC", "屏幕是否解锁: = $flag")
        return ifOpen && !flag
    }

    private val mTimeCounterRunnable: Runnable = object : Runnable {
        override fun run() { //在此添加需轮寻的接口
            doTask2() //getUnreadCount()执行的任务
            mMyHandler.postDelayed(this, 3 * 1000)
        }
    }

    override fun onDestroy() {
        mMyHandler.removeCallbacks(mTimeCounterRunnable)
        super.onDestroy()
    }

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值