2017-07-05 60 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(); 
}