国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現保持屏幕常亮功能

2020-02-21 17:22:32
字體:
來源:轉載
供稿:網友

在實際開發過程中,會有一些需要保持畫面明亮,避免進入鎖屏狀態的情況,然而最常見的是在視頻播放過程中,如果屏幕突然變暗這種情況,本文是武林技術頻道小編和大家分享的Android實現保持屏幕常亮功能。

網上有一種解決方案是使用PowerManager來實現屏幕不鎖屏:

  /**   * 打開休眠鎖只能保持手機不休眠   * @param context   */  @Deprecated  public static void openWakeLock(Context context) {    PowerManager powerManager = (PowerManager) context.getSystemService(Service.POWER_SERVICE);    PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Lock");    //是否需計算鎖的數量    wakeLock.setReferenceCounted(false);    //請求常亮,onResume()    wakeLock.acquire();  }

但這種方式在實際的測試過程中并沒有達到屏幕常亮的效果,而且還需要申明權限,不然會崩潰,所以這種方式被 pass 掉了:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

后來發現其實常亮功能很簡單,只需要在在當前的Activity中獲取到Window對象然后調用它的addFlags方法加上一個WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 的標識。

Window window = activity.getWindow();    window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

然后關閉常亮功能的時候則只需要Window清除這個WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON標識即可

 window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

所以我們簡單的封裝了一下,只要是哪個頁面Activity想要屏幕常亮則調用如下方法即可:

 /**   * 是否使屏幕常亮   *   * @param activity   */  public static void keepScreenLongLight(Activity activity) {    boolean isOpenLight = CommSharedUtil.getInstance(activity).getBoolean(CommSharedUtil.FLAG_IS_OPEN_LONG_LIGHT, true);    Window window = activity.getWindow();    if (isOpenLight) {      window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);    } else {      window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);    }  }

在想要屏幕常亮的Activity的onCreate()方法中調用如下方法即可:

  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    LongLightUtils.keepScreenLongLight(this);  }

因為屏幕常亮功能是可以在設置中設置開關的,而且下次用戶進APP需要保存上一次的設置,所以我們把是否打開常亮功能保存在了SharedPreferences中。

如果整個APP的頁面都要實現屏幕常亮該怎么做?難道在所有的Activity中的onCreate()都寫調用這個方法嗎?
答案顯然不是,這樣太沒有效率。

一般情況我們的項目里都會有BaseActivity,BaseFragment之類的父類,來抽離出通用的方法和樣式規范,所以我們可以在所有的Activity都會繼承的BaseActivity中onCreate()判斷是否需要屏幕常亮功能,這樣它的子類就具有了這個功能,像這樣:

public class BaseActivity extends AppCompatActivity {  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    LongLightUtils.keepScreenLongLight(this);  }}

另外還有一種情況,我們的APP中不是所有的Activity都是會繼承BaseActivity,比如有些頁面我們需要用H5和原生交互,為了交互更加方便安全一般會選用Cordova,而負責交互打開H5頁面的Activity是需要繼承CordovaActivity,這樣才能實現交互。CordovaActivity是第三方的Activity顯然是和我們的BaseActivity是沒有關系的。

同時如果我們集成了一些第三方的SDK,打開他們的SDK里面的頁面如果也需要屏幕常亮功能的話,該怎么辦?因為我們也無法去修改他們的代碼,不能在他們Activity中加入屏幕常亮功能。

這個時候其實有個很黑科技的功能,可能你以前都沒有見到過,那就是在application中有一個方法,
registerActivityLifecycleCallbacks,可以傳入一個回調接口,里面有當前APP中所有的Activity的生命周期方法回調,可以獲取到所有的Activity實例,這樣我們就能實現所有的APP頁面都能屏幕常亮了:

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) {      }    });  }}

我們在ActivityLifecycleCallbacks的onActivityResumed方法中調用屏幕常亮的方法即可實現,Application中registerActivityLifecycleCallbacks方法在熱修復框架中應該是比較常用到的,非常的實用。

以上就是Android實現保持屏幕常亮功能為大家介紹的全部知識,通過小編的介紹大家都了解清楚了吧,其實這個功能在我們日常生活中是很常用的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 那曲县| 屯门区| 博兴县| 拉萨市| 锡林浩特市| 苍山县| 山东省| 乌拉特中旗| 涟水县| 墨脱县| 呼玛县| 闵行区| 新余市| 辉南县| 上虞市| 张掖市| 改则县| 宁海县| 张北县| 石棉县| 汤阴县| 曲周县| 安西县| 太原市| 黄山市| 凯里市| 阿图什市| 兴宁市| 荣昌县| 沁水县| 马公市| 错那县| 博白县| 随州市| 稻城县| 中西区| 吉林省| 孟州市| 江陵县| 邵阳县| 南靖县|