要更改自動基於預定時間的亮度,創建螺紋工人自動運行adjustBrightness函數每隔1小時的時間間隔。
// AutoBrightness.java
import android.app.Activity;
import android.content.Context;
import android.provider.Settings;
import android.util.Log;
import android.view.WindowManager;
import static android.provider.Settings.System.SCREEN_BRIGHTNESS;
public class AutoBrightness {
private final static String TAG = AutoBrightness.class.getName();
private static boolean _isBrightnessThreadEnable;
private static BrightnessThread _brightnessThread;
private static Context _context;
private static AutoBrightness _instance;
private AutoBrightness(Context context) {
_context = context;
}
public static AutoBrightness getInstance(Context context) {
if (_instance == null) {
_instance = new AutoBrightness(context);
}
return _instance;
}
public void start() {
if (!_isBrightnessThreadEnable) {
_brightnessThread = new BrightnessThread(_context);
_brightnessThread.start();
_isBrightnessThreadEnable = true;
}
}
private class BrightnessThread extends Thread {
Context _context;
BrightnessThread(Context context) {
_context = context;
Settings.System.putInt(_context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
setPriority(Thread.NORM_PRIORITY);
}
private long getCurrentTime() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(SHORT_TIME_FORMAT);
String currentTime = simpleDateFormat.format(Calendar.getInstance().getTime());
try {
return simpleDateFormat.parse(currentTime).getTime();
} catch (ParseException ex) {
Log.e(TAG, Log.getStackTraceString(ex));
}
return 0;
}
private void adjustBrightness(float backlightValue){
WindowManager.LayoutParams layoutParams = ((Activity) _context).getWindow().getAttributes();
layoutParams.screenBrightness = backlightValue;
((Activity) _context).getWindow().setAttributes(layoutParams);
int systemBacklightValue = (int) (backlightValue * 255);
android.provider.Settings.System.putInt(_context.getContentResolver(), SCREEN_BRIGHTNESS, systemBacklightValue);
}
@Override
public void run() {
long morningTime = -3600000L, dayTime = 10800000L, nightTime = 39600000L;
float backlightValue = 0.5f;
boolean isMorningAdjusted = false;
boolean isDayAdjusted = false;
boolean isNightAdjusted = false;
while (_isBrightnessThreadEnable) {
long currentTime = getCurrentTime();
if (currentTime >= morningTime && currentTime < dayTime) {
// 06:00 - 09:59 (morning)
if (!isMorningAdjusted) {
backlightValue = 0.50f;
adjustBrightness(backlightValue);
isMorningAdjusted = true;
isDayAdjusted = false;
isNightAdjusted = false;
}
} else if (currentTime >= dayTime && currentTime < nightTime) {
// 10:00 - 17:59 (day)
if (!isDayAdjusted) {
backlightValue = 1.00f;
adjustBrightness(backlightValue);
isDayAdjusted = true;
isMorningAdjusted = false;
isNightAdjusted = false;
}
} else {
// 18:00 - 05:59 (night)
if (!isNightAdjusted) {
backlightValue = 0.35f;
adjustBrightness(backlightValue);
isNightAdjusted = true;
isMorningAdjusted = false;
isDayAdjusted = false;
}
}
try {
// delay for 1 hours
Thread.sleep(1000 * 60 * 60);
} catch (InterruptedException ex) {
Log.e(TAG, Log.getStackTraceString(ex));
}
}
}
}
}
如何使用?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_autoBrightness = AutoBrightness.getInstance(this);
_autoBrightness.start();
}
從API中提取預測信息,提取您需要的數據,然後使用調度程序相應地調整亮度。 – mbmc
mbmc,你可以給我指出關於Android的亮度控制API嗎? – Ihdina
聽起來你正在做一個自定義ROM /設備,你可以在框架代碼中找到亮度設置的位置,並通過反射訪問。 –