• LongLightUtils【保持屏幕常亮工具类】


    版权声明:本文为HaiyuKing原创文章,转载请注明出处!

    前言

    这里只是简单记录下保持屏幕常亮工具类LongLightUtils的使用,具体请阅读参考资料《Android屏幕常亮,其实很简单

    效果图

    暂不需要

    代码分析

     Android保持屏幕常亮的三种方法:

    (1)使用PowerManager【这种方式在实际的测试过程中并没有达到屏幕常亮的效果

    1、添加权限 

    <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

    2、activity使用

    public class ScreenActivity extends Activity
     
       {
            PowerManager powerManager = null;
            WakeLock wakeLock = null;
     
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                this.setContentView(R.layout.main);
                powerManager = (PowerManager)this.getSystemService(this.POWER_SERVICE);
                wakeLock = this.powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Lock");
           }
     
           @Override
           protected void onResume() {
               super.onResume();
               wakeLock.acquire();
           }
     
           @Override
           protected void onPause() {
               super.onPause();
               wakeLock.release();
           }
     
       }

    (2)在当前的Activity中获取到Window对象然后调用它的addFlags方法加上一个WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 的标识。【也就是本文中提到的方案

    其中addFlags(int flags)中的flags值代表各种锁的类型对CPU 、屏幕、键盘的影响:

    • PARTIAL_WAKE_LOCK :保持CPU 运转,屏幕和键盘灯有可能是关闭的。
    • SCREEN_DIM_WAKE_LOCK :保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
    • SCREEN_BRIGHT_WAKE_LOCK :保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯
    • FULL_WAKE_LOCK :保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度

    (3)在布局文件里加上android:keepScreenOn="true"

    在本文方案中,如果想要所有activity保持屏幕常亮,怎么办呢?

    一是在BaseActivity中使用LongLightUtils.keepScreenLongLight(this,true);方法;【这个方案不适用项目中集成第三方Activity的情况

    二是在MyApplication中使用【在application中有一个方法:registerActivityLifecycleCallbacks,可以传入一个回调接口,里面有当前APP中所有的Activity的生命周期方法回调,可以获取到所有的Activity实例

    public class MyApplication extends Application{
        @Override
        public void onCreate() {
            super.onCreate();
            registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
                @Override
                public void onActivityCreated(Activity activity, Bundle bundle) {
    
                }
    
                @Override
                public void onActivityStarted(Activity activity) {
    
                }
    
                @Override
                public void onActivityResumed(Activity activity) {
                    LongLightUtils.keepScreenLongLight(activity);
                }
    
                @Override
                public void onActivityPaused(Activity activity) {
    
                }
    
                @Override
                public void onActivityStopped(Activity activity) {
    
                }
    
                @Override
                public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
    
                }
    
                @Override
                public void onActivityDestroyed(Activity activity) {
    
                }
            });
        }
    }

    使用步骤

    一、项目组织结构图

     

    注意事项:

    1、  导入类文件后需要change包名以及重新import R文件路径

    2、  Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

    二、导入步骤

    (1)将LongLightUtils复制到项目中

    package com.why.project.androidcnblogsdemo.utils;
    
    import android.app.Activity;
    import android.view.WindowManager;
    
    /**
     * Used 保持屏幕常亮的解决方法
     * https://blog.csdn.net/finddreams/article/details/78363031?locationNum=4&fps=1
     * https://blog.csdn.net/a57565587/article/details/51669520
     */
    
    public class LongLightUtils {
        /**
         * 是否使屏幕常亮
         *
         * @param activity
         */
        public static void keepScreenLongLight(Activity activity, boolean isOpenLight){
            if (isOpenLight) {
                activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            } else {
                activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
            }
    
        }
    }

    三、使用方法

    activity布局文件【这里只是一个空布局】

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
    </LinearLayout>
    activity_longlightutils.xml

    activity使用如下【也可以统一放到BaseActivity中使用】

    package com.why.project.androidcnblogsdemo.activity;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    
    import com.why.project.androidcnblogsdemo.R;
    import com.why.project.androidcnblogsdemo.utils.LongLightUtils;
    
    /**
     * Created by HaiyuKing
     * Used 实现屏幕常亮
     */
    
    public class LongLightUtilsActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_longlightutils);
    
            LongLightUtils.keepScreenLongLight(this,true);//保持屏幕常亮
        }
    
        @Override
        protected void onDestroy() {
            LongLightUtils.keepScreenLongLight(this,false);//保持屏幕常亮【取消】
            super.onDestroy();
        }
    }

    混淆配置

    参考资料

    Android屏幕常亮,其实很简单

    Android保持屏幕常亮的三种方法

    项目demo下载地址

    暂时空缺

  • 相关阅读:
    基于visual Studio2013解决面试题之1101差值最小
    基于visual Studio2013解决面试题之1009兄弟字符串
    基于visual Studio2013解决面试题之1007鸡蛋和篮子
    基于visual Studio2013解决面试题之1006判断升序
    4.16 删除重复记录
    4.9 当相应行存在时更新
    4.8 在表中编辑记录
    4.7 阻止对某几列插入
    4.6 一次向多个表中插入记录
    4.4 从一个表向另外的表中复制行
  • 原文地址:https://www.cnblogs.com/whycxb/p/9351394.html
Copyright © 2020-2023  润新知