Android应用开发(23)获取亮灭屏状态

这篇具有很好参考价值的文章主要介绍了Android应用开发(23)获取亮灭屏状态。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android应用开发学习笔记——目录索引

在android 应用程序获取亮灭屏状态的常用方法有:

  1. 使用PowerManager提供的API函数
  2. 注册Broadcast监听

一、使用PowerManager提供的API函数

frameworks/base/core/java/android/os/PowerManager.java

import android.os.Build;
import android.os.PowerManager;

PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = false;
if (Build.VERSION.SDK_INT < 20) {
    /* deprecated Use {@link #isInteractive} instead. */
    isScreenOn = pm.isScreenOn();
} else {
    isScreenOn = pm.isInteractive();
}

使用PowerManager的API函数isInteractive()在应用程序中使用非常简单:在需要获取的地方调用一下即可。

 二、注册监听ACTION_SCREEN_ON/OFF

    /* 注册监听 */
    private void registerScreenReceiver() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        mScreenReceiver = new ScreenReceiver();
        registerReceiver(mScreenReceiver, filter);
    }

    /* 监听亮屏和灭屏事件 */
    private class ScreenReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (Intent.ACTION_SCREEN_ON.equals(action)) {
                Log.d(TAG, "screen is on");
            } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
                Log.d(TAG, "screen is off");
            }
        }
    }

四、测试程序

package com.example.screenstatusbroadcastreceiver;


import androidx.appcompat.app.AppCompatActivity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.os.PowerManager;
import android.util.Log;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {
    private static String TAG = "lzl-test";
    private ScreenReceiver mScreenReceiver;
    private TextView mTextView;
    private String mString = new String();
    private String mStringLife = new String();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = (TextView)findViewById(R.id.textView);
        checkScreenStatusByPowerManager();
        registerScreenReceiver();
        printLife("onCreate");
    }

    /* 获取屏幕状态通过PowerManager */
    private void checkScreenStatusByPowerManager() {
        PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
        boolean isScreenOn = false;
        // Android 4.4W (KitKat Wear)系统及以上使用新接口获取亮屏状态
        if (Build.VERSION.SDK_INT >= 20) {
            isScreenOn = pm.isInteractive();
        } else {
            isScreenOn = pm.isScreenOn();
        }
        if (isScreenOn) {
            printScreenStatus("first On");
        } else {
            printScreenStatus("first Off");
        }
    }

    /* 注册监听 */
    private void registerScreenReceiver() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        mScreenReceiver = new ScreenReceiver();
        registerReceiver(mScreenReceiver, filter);
    }

    /* 监听亮屏和灭屏事件 */
    private class ScreenReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (Intent.ACTION_SCREEN_ON.equals(action)) {
                printScreenStatus("On");
            } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
                printScreenStatus("Off");
            }
        }
    }

    private String getNowTimeMs() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss:SSS");
        return simpleDateFormat.format(new Date());
    }

    private void printLife(String string) {
        Log.d(TAG, "[" + getNowTimeMs() + "]" + string);
        mStringLife = String.format("%s[%s] %s: %s\n", mStringLife, getNowTimeMs(), "Main", string);
    }

    private void printScreenStatus(String string) {
        Log.d(TAG, "[" + getNowTimeMs() + "]" + "screen is " + string);
        mString = String.format("%s[%s] screen is: %s\n", mString, getNowTimeMs(), string);
        mTextView.setText(mString);
    }
...
}

 完整源码

百度网盘链接:百度网盘 请输入提取码 提取码:test

github下载地址:

GitHub - liuzhengliang1102/AndroidStudio-LearnAppDevelopment

ScreenStatusBroadcastReceiver目录

运行

运行log:

---------------------------- PROCESS STARTED (25097) for package com.example.screenstatusbroadcastreceiver ----------------------------
2023-07-30 20:00:09.592 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:09:591]screen is first On
2023-07-30 20:00:09.594 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:09:594]onCreate
2023-07-30 20:00:09.603 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:09:603]onStart
2023-07-30 20:00:09.606 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:09:606]onResume
2023-07-30 20:00:16.793 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:16:793]onPause
2023-07-30 20:00:16.852 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:16:850]onStop
2023-07-30 20:00:17.797 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:17:795]screen is Off
2023-07-30 20:00:18.565 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:18:564]screen is On
2023-07-30 20:00:20.539 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:20:536]onRestart
2023-07-30 20:00:20.543 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:20:543]onStart
2023-07-30 20:00:20.553 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:20:552]onResume
2023-07-30 20:00:26.361 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:26:360]onPause
2023-07-30 20:00:26.393 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:26:393]onStop
2023-07-30 20:00:27.574 25097-25097 lzl-test                com...screenstatusbroadcastreceiver  D  [20:00:27:570]screen is Off

使用xiaomi 13 Ultra运行截图如下:

  Android应用开发(23)获取亮灭屏状态,Android应用开发学习笔记,android,android studio

  

点此查看Android应用开发学习笔记的完整目录文章来源地址https://www.toymoban.com/news/detail-618609.html

到了这里,关于Android应用开发(23)获取亮灭屏状态的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android应用开发(1)Android Studio开发环境搭建

    Android应用开发学习笔记——目录索引 本章介绍搭建Android Studio应用开发环境,创建并编译App工程,运行和调试App。 谷歌开发者网站可直接下载AndroidStudio,下载链接:https://developer.android.com/studio 点击【Download Android Studio Electric Eel】 勾选【I have read and agree with the above terms and

    2024年02月07日
    浏览(46)
  • Flutter应用开发,系统样式改不了?SystemChrome 状态栏、导航栏、屏幕方向……想改就改

    开发APP时,我们经常要客制化状态栏、导航栏栏等的样式和风格,Flutter开发APP时如何满足这些客制化要求呢? 自定义状态栏和导航栏的样式:您可以使用 SystemChrome 来定义状态栏和导航栏的颜色、文字样式等,以满足您的设计需求。 隐藏系统级界面元素:如果您希望在应用

    2024年02月10日
    浏览(37)
  • GPT应用开发:编写插件获取实时天气信息

    欢迎阅读本系列文章!我将带你一起探索如何利用OpenAI API开发GPT应用。无论你是编程新手还是资深开发者,都能在这里获得灵感和收获。 本文,我们将继续展示聊天API中插件的使用方法,让你能够轻松驾驭这个强大的工具。 首先给大家展示下插件的运行效果,如下图所示:

    2024年01月20日
    浏览(44)
  • 鸿蒙(HarmonyOS)应用开发——从网络获取数据(题目答案)

    1.在http模块中,多个请求可以使用同一个httpRequest对象,httpRequest对象可以复用。 错误(False) 2.使用http模块发起网络请求后,可以使用destroy方法中断网络请求。 正确(True) 3.Web组件onConfirm(callback: (event?: { url: string; message: string; result: JsResult }) = boolean)事件,返回false时候触发网页

    2024年01月20日
    浏览(62)
  • 苹果个人开发者账号申请+获取证书+上架应用商城

    一、先注册一个苹果账号,打开苹果开发者中心Sign In - Apple 1、如果Apple ID可以直接登录,否则先进行创建 2、点击创建后跳转至填写注册信息页面 填写内容完成后,点击提交,验证邮箱以及手机号 二、开启双重认证 使用iPhone登录相同Apple ID,打开双重认证 三、在IPhone App S

    2024年04月10日
    浏览(58)
  • Android应用开发(7)按键(Button)

    Android应用开发学习笔记——目录索引 本章介绍按钮(Button)控件的常见用法,结合前面Android应用开发(5)文本显示(TextView)介绍按钮(Button)监听点击和长按事件,禁用和启用等。 参考google官网:https://developer.android.com/reference/android/widget/Button 按钮控件Button由TextView派生

    2024年02月05日
    浏览(52)
  • Android移动应用开发的学习路线

    Android移动应用开发的学习路线。以下是一个基本的学习路线,供你参考: 1. Java基础 学习Java的基本语法和面向对象编程(OOP)的概念 了解Java的数据类型、变量和常量 学习控制结构(如条件语句、循环语句)和函数 2. Android基础 了解Android平台的基本概念和架构 学习Android的

    2024年02月11日
    浏览(48)
  • HarmonyOS NEXT应用开发之Web获取相机拍照图片案例

    介绍 本示例介绍如何在HTML页面中拉起原生相机进行拍照,并获取返回的图片。 效果预览图 使用说明 点击HTML页面中的选择文件按钮,拉起原生相机进行拍照。 完成拍照后,将图片在HTML的img标签中显示。 实现思路 添加Web组件,设置onShowFileSelector属性,接收HTML页面中input的点

    2024年03月23日
    浏览(44)
  • 安卓开发后台应用周期循环获取位置信息上报服务器

    最近有需求,在APP启动后,退到后台,还要能实现周期获取位置信息上报服务器,研究了一下实现方案。 一、APP退到后台后网络请求实现 APP退到后台后,实现周期循环发送网络请求。目前尝试了两种方案是OK,如下: (1)AlarmManager + 前台服务 +广播的方案,可以正常实现,

    2024年02月16日
    浏览(38)
  • 移动应用开发环境搭建Android Studio

    记得提前开启电脑虚拟化支持,具体方法可自行百度 查看是否启用虚拟化 JDK安装与卸载 由于Andriod开发使用的语言是javaKotlin,这里使用的是java语言所以需要先安装java的开发环境 所有开发 Android 应用程序需要的工具都是开源的,并且可以从互联网上下载 Android Studio 是谷歌推

    2023年04月08日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包