Как изменить яркость экрана в 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); } 

Мне нужна SetBright(int brightness, Context context); чтобы перейти в SetBright(int brightness, Context context);

Но теперь я должен вызвать метод SetBright(int brightness, Context context) в Brocastreceiver. Я могу использовать контекст в методе onReceive (контекст контекста, намерение намерения), но если я покинул приложение, это не сработает.

Есть ли другой метод, который я могу использовать для изменения яркости вместо использования активности?

Solutions Collecting From Web of "Как изменить яркость экрана в BroadcastReceiver?"

Начать фиктивную активность и установить параметр окна с использованием яркости (от 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); 

Вначале я использовал 500 мс для времени обновления экрана, но в галактике 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); }