版权声明:本文为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使用如下【也可以统一放到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(); } }
混淆配置
无
参考资料
项目demo下载地址
暂时空缺