繁体   English   中英

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

[英]How can I change the Brightness of the screen in BroadcastReceiver?

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

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)调用方法SetBright(int brightness, Context context) 我可以在方法onReceive(Context context,Intent intent)中使用上下文,但如果我退出应用程序,它就不起作用。

有没有其他方法可以用来改变亮度而不是使用活动?

使用亮度启动虚拟活动并设置窗口参数(对于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);

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

如果你想保存,那么在设置亮度后尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM