1

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

2 回答 2

1

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

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

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

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

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

于 2013-05-13T22:16:27.767 回答
1

正如 Squonk 所建议的那样,我使用SharedPreferences并且可以通过以下方式解决我的问题:

主要活动

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

谢谢你帮助我。

于 2013-05-13T23:39:14.903 回答