Android實現(xiàn)屏幕保持常亮功能
本文實例為大家分享了Android實現(xiàn)屏幕保持常亮的具體代碼,供大家參考,具體內(nèi)容如下
一、需求背景
當我們在玩游戲或者看視頻的時候不希望app黑屏,那么就需要在app使用的時候處于常量狀態(tài)。
二、實現(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è)置屏幕保持常亮
? ? ? ? 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
}以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android用RecyclerView實現(xiàn)圖標拖拽排序以及增刪管理
這篇文章主要介紹了Android用RecyclerView實現(xiàn)圖標拖拽排序以及增刪管理的方法,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下2021-03-03
C#中利用正則表達式將人民幣金額轉(zhuǎn)換為大寫漢字
這篇文章主要介紹了C#中利用正則表達式將人民幣金額轉(zhuǎn)換為大寫漢字的方法,需要的朋友可以參考下2016-02-02
Android Camera是否支持變焦的判斷方法總結(jié)
這篇文章主要介紹了Android Camera是否支持變焦的判斷方法總結(jié),本文總結(jié)了調(diào)節(jié)攝像頭焦距編程中遇到的一些問題和解決方法,需要的朋友可以參考下2015-04-04
android初學者必須掌握的Activity狀態(tài)的四大知識點(必讀)
本篇文章主要介紹了android activity的四種狀態(tài),詳細的介紹了四種狀態(tài),包括Running狀態(tài)、Paused狀態(tài)、Stopped狀態(tài)、Killed狀態(tài),有興趣的可以了解一下。2016-11-11
Android RefreshLayout實現(xiàn)下拉刷新布局
這篇文章主要為大家詳細介紹了Android RefreshLayout實現(xiàn)下拉刷新布局,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10

