2017-07-05 37 views
-1

我创建了一个android应用程序(销售点终端),在加油站安装户外。我有一个问题:应用程序在白天(当太阳光出现时)变得不可见如何根据日光条件创建“自动亮度”来调整液晶显示屏照明?

基于来自here的信息,对于Android应用程序在太阳光出现时保持可见状态将亮度设置为最大值。

如何根据日光条件创建“自动亮度”来调整液晶显示屏照明?

在房间外,当条件是:

  1. 早晨/阴:屏幕,中等亮度。
  2. 白天/晴天:高亮度屏幕。
  3. 夜晚:低亮度屏幕。

谢谢。

+0

从API中提取预测信息,提取您需要的数据,然后使用调度程序相应地调整亮度。 – mbmc

+0

mbmc,你可以给我指出关于Android的亮度控制API吗? – Ihdina

+0

听起来你正在做一个自定义ROM /设备,你可以在框架代码中找到亮度设置的位置,并通过反射访问。 –

回答

0

要更改自动基于预定时间的亮度,创建螺纹工人自动运行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(); 
}