日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Android實現屏幕保持常亮功能_Android

作者:最萌小熊貓 ? 更新時間: 2022-03-30 編程語言

本文實例為大家分享了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

欄目分類
最近更新