欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實(shí)現(xiàn)保持屏幕常亮功能

 更新時(shí)間:2017年11月07日 11:43:24   作者:尋夢(mèng)-finddreams  
本篇文章主要介紹了Android實(shí)現(xiàn)保持屏幕常亮功能,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

筆者所在公司做的APP是股票類(lèi)的,用戶在查看股票報(bào)價(jià)頁(yè)面的時(shí)候,往往需要開(kāi)啟盯盤(pán)模式,這個(gè)時(shí)候屏幕是不能黑屏的,黑屏?xí)?dǎo)致用戶看不到一些關(guān)鍵報(bào)價(jià)漲跌,錯(cuò)過(guò)了買(mǎi)入賣(mài)出的最佳時(shí)機(jī),就會(huì)給用戶造成損失,這是股票類(lèi)軟件所不能容許的,所以一般的股票類(lèi)APP都會(huì)有屏幕常亮功能。

當(dāng)初我們做這個(gè)功能的時(shí)候,在網(wǎng)上找了一些教程發(fā)現(xiàn)有些達(dá)不到效果,然后找到了一種比較完美的沒(méi)有兼容性的實(shí)現(xiàn)方案,下面給大家分享一下。

網(wǎng)上有一種解決方案是使用PowerManager來(lái)實(shí)現(xiàn)屏幕不鎖屏:

  /**
   * 打開(kāi)休眠鎖只能保持手機(jī)不休眠
   * @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");
    //是否需計(jì)算鎖的數(shù)量
    wakeLock.setReferenceCounted(false);
    //請(qǐng)求常亮,onResume()
    wakeLock.acquire();
  }

但這種方式在實(shí)際的測(cè)試過(guò)程中并沒(méi)有達(dá)到屏幕常亮的效果,而且還需要申明權(quán)限,不然會(huì)崩潰,所以這種方式被 pass 掉了:

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

后來(lái)發(fā)現(xiàn)其實(shí)常亮功能很簡(jiǎn)單,只需要在在當(dāng)前的Activity中獲取到Window對(duì)象然后調(diào)用它的addFlags方法加上一個(gè)WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 的標(biāo)識(shí)。

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

然后關(guān)閉常亮功能的時(shí)候則只需要Window清除這個(gè)WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON標(biāo)識(shí)即可

 window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

所以我們簡(jiǎn)單的封裝了一下,只要是哪個(gè)頁(yè)面Activity想要屏幕常亮則調(diào)用如下方法即可:

 /**
   * 是否使屏幕常亮
   *
   * @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()方法中調(diào)用如下方法即可:

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

因?yàn)槠聊怀A凉δ苁强梢栽谠O(shè)置中設(shè)置開(kāi)關(guān)的,而且下次用戶進(jìn)APP需要保存上一次的設(shè)置,所以我們把是否打開(kāi)常亮功能保存在了SharedPreferences中。

如果整個(gè)APP的頁(yè)面都要實(shí)現(xiàn)屏幕常亮該怎么做?難道在所有的Activity中的onCreate()都寫(xiě)調(diào)用這個(gè)方法嗎?
答案顯然不是,這樣太沒(méi)有效率。

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

public class BaseActivity extends AppCompatActivity {

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

另外還有一種情況,我們的APP中不是所有的Activity都是會(huì)繼承BaseActivity,比如有些頁(yè)面我們需要用H5和原生交互,為了交互更加方便安全一般會(huì)選用Cordova,而負(fù)責(zé)交互打開(kāi)H5頁(yè)面的Activity是需要繼承CordovaActivity,這樣才能實(shí)現(xiàn)交互。CordovaActivity是第三方的Activity顯然是和我們的BaseActivity是沒(méi)有關(guān)系的。

同時(shí)如果我們集成了一些第三方的SDK,打開(kāi)他們的SDK里面的頁(yè)面如果也需要屏幕常亮功能的話,該怎么辦?因?yàn)槲覀円矡o(wú)法去修改他們的代碼,不能在他們Activity中加入屏幕常亮功能。

這個(gè)時(shí)候其實(shí)有個(gè)很黑科技的功能,可能你以前都沒(méi)有見(jiàn)到過(guò),那就是在application中有一個(gè)方法,
registerActivityLifecycleCallbacks,可以傳入一個(gè)回調(diào)接口,里面有當(dāng)前APP中所有的Activity的生命周期方法回調(diào),可以獲取到所有的Activity實(shí)例,這樣我們就能實(shí)現(xiàn)所有的APP頁(yè)面都能屏幕常亮了:

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

      }
    });
  }
}

我們?cè)贏ctivityLifecycleCallbacks的onActivityResumed方法中調(diào)用屏幕常亮的方法即可實(shí)現(xiàn),Application中registerActivityLifecycleCallbacks方法在熱修復(fù)框架中應(yīng)該是比較常用到的,非常的實(shí)用。

最后附上屏幕常亮的示例項(xiàng)目地址,有需要的朋友可以去看看。https://github.com/finddreams/ScreenLongLight

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • android 無(wú)須root截圖方案的實(shí)現(xiàn)

    android 無(wú)須root截圖方案的實(shí)現(xiàn)

    這篇文章主要介紹了android 無(wú)須root截圖方案的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • Android AIDL和遠(yuǎn)程Service調(diào)用示例代碼

    Android AIDL和遠(yuǎn)程Service調(diào)用示例代碼

    本文主要介紹Android AIDL和遠(yuǎn)程Service,這里詳細(xì)介紹了相關(guān)知識(shí),并附實(shí)例代碼和實(shí)現(xiàn)效果圖,有興趣的朋友參考下
    2016-08-08
  • Android錄制聲音文件(音頻)并播放

    Android錄制聲音文件(音頻)并播放

    這篇文章主要為大家詳細(xì)介紹了Android錄制聲音文件并播放音頻文件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • android?studio?項(xiàng)目?:UI設(shè)計(jì)高精度實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    android?studio?項(xiàng)目?:UI設(shè)計(jì)高精度實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    這篇文章主要介紹了android?studio?項(xiàng)目?:UI設(shè)計(jì)高精度實(shí)現(xiàn)簡(jiǎn)單計(jì)算器,自主完成一個(gè)簡(jiǎn)單APP的設(shè)計(jì)工作,綜合應(yīng)用已經(jīng)學(xué)到的Android?UI設(shè)計(jì)技巧,下面來(lái)看看實(shí)驗(yàn)實(shí)現(xiàn)過(guò)程
    2021-12-12
  • Android實(shí)現(xiàn)頂部導(dǎo)航菜單左右滑動(dòng)效果

    Android實(shí)現(xiàn)頂部導(dǎo)航菜單左右滑動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)頂部導(dǎo)航菜單左右滑動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Android Studio項(xiàng)目適配AndroidX(Android 9.0)的方法步驟

    Android Studio項(xiàng)目適配AndroidX(Android 9.0)的方法步驟

    這篇文章主要介紹了Android Studio項(xiàng)目適配AndroidX(Android 9.0)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Apache?Cordova?Android原理應(yīng)用實(shí)例詳解

    Apache?Cordova?Android原理應(yīng)用實(shí)例詳解

    這篇文章主要為大家介紹了Apache?Cordova?Android原理應(yīng)用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Android LocationManager獲取經(jīng)度與緯度等地理信息

    Android LocationManager獲取經(jīng)度與緯度等地理信息

    這篇文章主要介紹了Android LocationManager獲取經(jīng)度與緯度等地理信息的相關(guān)資料,希望通過(guò)本站大家能掌握這樣的知識(shí),需要的朋友可以參考下
    2017-09-09
  • android 布局之ConstraintLayout的使用

    android 布局之ConstraintLayout的使用

    這篇文章主要介紹了android 布局之ConstraintLayout的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Android Studio如何查看源碼并調(diào)試的方法步驟

    Android Studio如何查看源碼并調(diào)試的方法步驟

    這篇文章主要介紹了Android Studio如何查看源碼并調(diào)試的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論