如何在BroadcastReceiver中更改屏幕的亮度?

时间:2012-05-21 14:49:00

标签: android screen-brightness

我想改变亮度,我可以使用这种方法:

public static void SetBright(int brightness, Context context) {
    if (isAutoBrightness(context)) {
        stopAutoBrightness(context);
    }
    WindowManager.LayoutParams lp = ((Activity) context).getWindow()
            .getAttributes();
    lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f);
    ((Activity) context).getWindow().setAttributes(lp);
}

我需要一个活动传入SetBright(int brightness, Context context);

但现在我必须在Brocastreceiver中调用方法SetBright(int brightness, Context context)。我可以在方法onReceive(Context context,Intent intent)中使用上下文,但是如果我退出应用程序,它就不起作用。

我可以使用另一种方法来改变亮度而不是使用活动吗?

3 个答案:

答案 0 :(得分:4)

启动虚拟活动并使用亮度设置窗口参数(对于255,0到1范围-1)。 运行50,100或500毫秒的计时器。之后完成活动。

TimerTask finishTask = new TimerTask() {

        @Override
        public void run() {
            BrightActivity.this.finish();
            timer.cancel();
            if (timer != null) {
                timer = null;
            }
        }
    };
    timer.schedule(finishTask,Constants.BRIGHTNESS_REFRESH_DELAY);

答案 1 :(得分:1)

主要是我使用500毫秒的屏幕刷新时间,但在galaxy s3中它不起作用。但是1000还可以。因此屏幕刷新时间可能与设备有关。

答案 2 :(得分:0)

如果您想保存,请在设置亮度后尝试此操作:

public static void saveBrightness(Context context, int brightness) {
   ContentResolver resolver= context.getContentResolver();
    Uri uri = android.provider.Settings.System
            .getUriFor("screen_brightness");
    android.provider.Settings.System.putInt(resolver, "screen_brightness",
            brightness);
    resolver.notifyChange(uri, null);
}