从另一个活动更改活动中的设置的最佳方法

时间:2013-05-13 21:52:27

标签: android android-activity settings brightness

我正在创建一个简单的电子书,但我需要从我的主要活动中更改某些活动的屏幕亮度,从蓝牙接收数据并在书籍运行时仍然在后台运行。 我的问题是:如何将一个函数从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);

2 个答案:

答案 0 :(得分:1)

首先添加清单文件的权限。

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

然后您可以通过运行以下代码行来更改亮度:

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

注意亮度必须是0到255之间的 int 值。

答案 1 :(得分:1)

根据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);
            } 
        }
    };

谢谢你帮我Squonk。