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

感谢您的帮助我湿眶客。