LongLightUtils【保持屏幕常亮工具類】

版權聲明:本文爲HaiyuKing原創文章,轉載請註明出處!android

前言

這裏只是簡單記錄下保持屏幕常亮工具類LongLightUtils的使用,具體請閱讀參考資料《Android屏幕常亮,其實很簡單app

效果圖

暫不須要ide

代碼分析

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

(1)使用PowerManager【這種方式在實際的測試過程當中並無達到屏幕常亮的效果

一、添加權限 工具

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

二、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的狀況ui

二是在MyApplication中使用【在application中有一個方法:registerActivityLifecycleCallbacks,能夠傳入一個回調接口,裏面有當前APP中全部的Activity的生命週期方法回調,能夠獲取到全部的Activity實例
this

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、項目組織結構圖

 

注意事項:spa

一、  導入類文件後須要change包名以及從新import R文件路徑.net

二、  Values目錄下的文件(strings.xml、dimens.xml、colors.xml等),若是項目中存在,則複製裏面的內容,不要整個覆蓋

2、導入步驟

(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);
        }

    }
}

3、使用方法

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下載地址

暫時空缺

相關文章
相關標籤/搜索