4

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

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

我需要一个 Activity 来传递SetBright(int brightness, Context context);

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

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

4

3 回答 3

4

启动虚拟活动并使用亮度设置窗口参数(0 到 1 范围 - 1 为 255)。运行 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);
于 2012-11-02T08:54:39.747 回答
1

我主要使用 500 毫秒的屏幕刷新时间,但在 Galaxy s3 中它不起作用。但是1000是可以的。所以屏幕刷新时间可能取决于设备。

于 2012-11-15T10:45:11.767 回答
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);
}
于 2012-05-21T15:51:39.807 回答