網(wǎng)站首頁 編程語言 正文
本文實(shí)例為大家分享了Android實(shí)現(xiàn)屏幕保持常亮的具體代碼,供大家參考,具體內(nèi)容如下
一、需求背景
當(dāng)我們在玩游戲或者看視頻的時(shí)候不希望app黑屏,那么就需要在app使用的時(shí)候處于常量狀態(tài)。
二、實(shí)現(xiàn)方案
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,注意此方法可能出現(xiàn)異常.具體可看源碼 ?}
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中設(shè)置
setKeepScreenOn(true/false),同樣可以在xml中設(shè)置android:keepScreenOn="",只要View可見即生效。
4、通過添加flag的方法設(shè)置
/** * 是否開啟屏幕常亮 ?*/ private var enableKeepScreenOn = false /** ?* activity 生命周期監(jiān)聽器 ?*/ private var mActivityLifecycleCallbacks = object : Application.ActivityLifecycleCallbacks { ? ? override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { ? ? ? ? //在activity創(chuàng)建的時(shí)候設(shè)置屏幕保持常亮 ? ? ? ? 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) { ? ? } } /** ?* 設(shè)置保持屏幕常亮狀態(tài) ?*/ fun setKeepScreenOn(enable: Boolean) { ?? ?enableKeepScreenOn = enable }
原文鏈接:https://blog.csdn.net/weixin_42600398/article/details/116402553
相關(guān)推薦
- 2023-05-13 Python?readline()和readlines()函數(shù)實(shí)現(xiàn)按行讀取文件_python
- 2022-10-24 利用Pandas求兩個(gè)dataframe差集的過程詳解_python
- 2022-08-03 GoFrame框架使用避坑指南和實(shí)踐干貨_Golang
- 2022-04-17 C語言實(shí)現(xiàn)簡易通訊錄完整流程_C 語言
- 2022-04-16 pycharm三個(gè)有引號不能自動(dòng)生成函數(shù)注釋的問題_python
- 2022-08-07 QT實(shí)戰(zhàn)之打開最近文檔功能的實(shí)現(xiàn)_C 語言
- 2022-05-04 C#調(diào)用SQL?Server中有參數(shù)的存儲(chǔ)過程_C#教程
- 2022-11-06 React?Hooks--useEffect代替常用生命周期函數(shù)方式_React
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支