網站首頁 編程語言 正文
本文實例為大家分享了Android實現屏幕保持常亮的具體代碼,供大家參考,具體內容如下
一、需求背景
當我們在玩游戲或者看視頻的時候不希望app黑屏,那么就需要在app使用的時候處于常量狀態。
二、實現方案
1、使用PowerManager.WakeLock
PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE); if (powerManager != null) { ? ? ? ? ?wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "WakeLock"); ? ?wakeLock.acquire(); ?//開啟屏幕常亮 ? //wakeLock.release(); ?//釋放wakeLock,注意此方法可能出現異常.具體可看源碼 ?}
2、MediaPlayer有自帶的方法防止屏幕黑屏
mediaPlayer.setScreenOnWhilePlaying(true);
源碼如下:
/** ? * Control whether we should use the attached SurfaceHolder to keep the ? * screen on while video playback is occurring. ?This is the preferred ? * method over {@link #setWakeMode} where possible, since it doesn't ? * require that the application have permission for low-level wake lock ? * access. ? * ? * @param screenOn Supply true to keep the screen on, false to allow it ? * to turn off. ? */ ?public void setScreenOnWhilePlaying(boolean screenOn) { ? ? ?if (mScreenOnWhilePlaying != screenOn) { ? ? ? ? ?if (screenOn && mSurfaceHolder == null) { ? ? ? ? ? ? ?Log.w(TAG, "setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder"); ? ? ? ? ?} ? ? ? ? ?mScreenOnWhilePlaying = screenOn; ? ? ? ? ?updateSurfaceScreenOn(); ? ? ?} ?} ...... ?private void updateSurfaceScreenOn() { ? ? ?if (mSurfaceHolder != null) { ?? ? ? ? ? ?mSurfaceHolder.setKeepScreenOn(mScreenOnWhilePlaying && mStayAwake); ?? ? ? ?} ?}
3、在view中設置
setKeepScreenOn(true/false),同樣可以在xml中設置android:keepScreenOn="",只要View可見即生效。
4、通過添加flag的方法設置
/** * 是否開啟屏幕常亮 ?*/ private var enableKeepScreenOn = false /** ?* activity 生命周期監聽器 ?*/ private var mActivityLifecycleCallbacks = object : Application.ActivityLifecycleCallbacks { ? ? override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { ? ? ? ? //在activity創建的時候設置屏幕保持常亮 ? ? ? ? if (enableKeepScreenOn) { ? ? ? ? ? ? activity.window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) ? ? ? ? } ? ? } ? ? override fun onActivityStarted(activity: Activity) { ? ? } ? ? override fun onActivityResumed(activity: Activity) { ? ? } ? ? override fun onActivityPaused(activity: Activity) { ? ? } ? ? override fun onActivityStopped(activity: Activity) { ? ? } ? ? override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) { ? ? } ? ? override fun onActivityDestroyed(activity: Activity) { ? ? } } /** ?* 設置保持屏幕常亮狀態 ?*/ fun setKeepScreenOn(enable: Boolean) { ?? ?enableKeepScreenOn = enable }
原文鏈接:https://blog.csdn.net/weixin_42600398/article/details/116402553
相關推薦
- 2022-08-20 docker鏡像alpine中安裝oracle客戶端_docker
- 2022-12-24 C++中STL容器的主要使用及含義說明_C 語言
- 2022-10-31 C#?如何調用python腳本_C#教程
- 2022-08-11 Python中函數的創建及調用_python
- 2022-07-02 python?np.arange?步長0.1的問題需要特別注意_python
- 2022-06-07 ?分享一個Python?遇到數據庫超好用的模塊_python
- 2022-02-03 yii joinwith查數據的問題
- 2022-04-20 C++中的函數你真的理解了嗎_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支