簡體   English   中英

Android生命周期問題

[英]Android Life Cycle Issue

我正在開發一個手電筒應用程序,我希望將它設置為用戶打開應用程序時屏幕亮度變滿的地方。 我已經設置了一個復選框首選項來執行此操作,但有一個小問題。 見下面的代碼:

<CheckBoxPreference
     android:defaultValue="true"
     android:key="pref_brightness"
     android:summary="When checked, brightness will raise to highest level on main activity."
     android:title="@string/pref_5" />

這是首選項布局的xml文件中的復選框代碼。

SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean box = getPrefs.getBoolean("pref_brightness", true);     
if (box == true) {
    WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.screenBrightness = 100 / 100.0f;
    getWindow().setAttributes(lp);
}

這是我在MainActivity.java文件中訪問首選項的地方。 這是在onCreate()方法中。

現在我的問題是......當我打開應用程序時,會檢查該框(除非用戶更改)並且亮度最大化應該如此。 但是,當我進入首選項並取消選中該框時,然后按“后退”按鈕,該框保存但不會對主要活動產生任何影響。 如果我更改了框並按下操作欄上的“向上”按鈕,一切都很好。 按下后退按鈕時為什么不起作用? 我嘗試使用onBackPressed()但似乎沒有解決這個問題。

**根據“Karakuri's”答案更新:**

我做了你說的,它仍然無法正常工作。 如果未選中該框並且我檢查它,按下后退按鈕,它可以工作,但如果我再次將其更改回來,再次按回來,它不會保存。 這是您的建議代碼:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean box = getPrefs.getBoolean("pref_brightness", true);     
    if (box == true) {
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = 100 / 100.0f;
        getWindow().setAttributes(lp);
    }
    super.onWindowFocusChanged(hasFocus);
}

感謝幫助,

安德魯

更改屬性的代碼不應該在onCreate()內。嘗試使用onStart()

如果在onCreate()運行此代碼,則只會在創建Activity時調用一次。 你需要在其他地方運行它。 我推薦onWindowFocusChanged() (您可以使用onStart()onResume() ,但這些不會考慮鎖定屏幕。)

解決了!

我只需要一個完整的if語句,如下所示:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
    boolean box = getPrefs.getBoolean("pref_brightness", true);     
    if (box == true) {
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = 100 / 100.0f;
        getWindow().setAttributes(lp);
    }
    else{
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = -1;
        getWindow().setAttributes(lp);
    }
    super.onWindowFocusChanged(hasFocus);
}

現在,如果選中復選框,則將主活動的亮度更改為已滿,但如果未選中,則將用戶的亮度設置為其設置。

感謝Karakuri的幫助以及Nizam

安德魯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM