2013-05-13 89 views
0

我正在創建一個簡單的電子書,但我需要更改某些活動的屏幕亮度,以便從我的主要活動中,接收藍牙數據並仍在後臺運行當書正在運行時。 我的問題是:如何從MainActivity調用一個函數到Page1Activity,或者相反,不管。從另一個活動中更改活動設置的最佳方法

,如果我的活動之一把這個代碼,我可以改變活動的亮度,但我真的需要。如果我使用一個調用,從一個到另一個

WindowManager.LayoutParams lp = getWindow().getAttributes(); 
lp.screenBrightness = adjusted; 
getWindow().setAttributes(lp); 

,頁面僅會在創建時顯示更改,但我不想在收到數據時重新創建頁面。

android.provider.Settings.System.putInt(getContentResolver(), 
     android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, 
     android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); 

android.provider.Settings.System.putInt(getContentResolver(), 
     android.provider.Settings.System.SCREEN_BRIGHTNESS, (int)(255*adjusted)); 

然後,我需要知道,如果有一種方式來獲得或儲存使用getWindow()的活動,或者是否存在一種方法來調用兩個活動之間或是否有另一種方式來做到這一點的功能。

PS:我知道改變音量的功能,如果我在主要活動中使用它,整個系統的音頻會立即改變,如果有人知道像這樣的亮度使用功能,它會成爲解決我的問題最簡單的方法。

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 
     volAdjusted, AudioManager.FLAG_SHOW_UI); 
+1

您不應該嘗試直接從其他Android組件訪問一個'Activity'。如果另一個可見,則不能保證存在一個「活動」。要做你想做的事,你可以使用'SharedPreferences'中的設置,或者當你啓動你想要控制的'Activity'時,在'Intent'中加入一個值。 – Squonk 2013-05-13 22:05:47

+0

我將不得不創建一個線程來監聽SharedPreferences中的變量? – 2013-05-13 22:40:08

回答

1

首先爲您的清單文件添加權限。

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

然後就可以通過運行的代碼下面的行改變亮度:

android.provider.Settings.System.putInt(getContentResolver(),android.provider.Settings.System.SCREEN_BRIGHTNESS, brightness); 

亮度必須是INT值所建議0之間和255

+0

我已經使用過了,就像你在我的問題中看到的那樣,但不會立即改變,我需要重新創建活動以查看更改。 – 2013-05-13 22:29:02

0

Squonk,我用SharedPreferences,我可以解決我的問題:

MainActivity

SharedPreferences settings = 
     PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putFloat("Brightness", adjusted); 
    editor.commit(); 

其他所有活動

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    //... 
    SharedPreferences preferences = 
     PreferenceManager.getDefaultSharedPreferences(getBaseContext());   
    preferences.registerOnSharedPreferenceChangeListener(prefListener); 
} 

SharedPreferences.OnSharedPreferenceChangeListener prefListener = 
    new SharedPreferences.OnSharedPreferenceChangeListener() { 
     public void onSharedPreferenceChanged(SharedPreferences prefs,String key) { 
      if (key.equals("Brightness")) { 
       WindowManager.LayoutParams lp = getWindow().getAttributes(); 
       lp.screenBrightness = prefs.getFloat(key, 0.8f); 
       getWindow().setAttributes(lp); 
      } 
     } 
    }; 

感謝您的幫助我溼眶客。

相關問題