Android framework设置默认屏幕亮度值源码分析

大号在练葵花宝典  论坛元老 | 2024-6-24 22:26:01 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1033|帖子 1033|积分 3099

1、概述

在Android中,config.xml文件用于设置各种系统设置和资源。对于屏幕亮度的设置,config.xml并不是直接用于设置屏幕亮度的地方,但它可以包含默认的系统设置和一些相关的参数。以下是如何在config.xml中设置一些与屏幕亮度相关的设置的详细步调。
2、找到或创建config.xml

在Android系统源码中,config.xml通常位于以下路径:
frameworks/base/core/res/res/values/config.xml
如果项目中没有config.xml文件,可以在相应的路径下创建一个。
3、设置屏幕亮度相关参数

在config.xml中,可以定义与屏幕亮度相关的参数,比方默认亮度值、主动亮度调节参数等。以下是一个示例设置:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. /*
  4. ** Copyright 2009, The Android Open Source Project
  5. **
  6. ** Licensed under the Apache License, Version 2.0 (the "License");
  7. ** you may not use this file except in compliance with the License.
  8. ** You may obtain a copy of the License at
  9. **
  10. **     http://www.apache.org/licenses/LICENSE-2.0
  11. **
  12. ** Unless required by applicable law or agreed to in writing, software
  13. ** distributed under the License is distributed on an "AS IS" BASIS,
  14. ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. ** See the License for the specific language governing permissions and
  16. ** limitations under the License.
  17. */
  18. -->
  19. <!-- These resources are around just to allow their values to be customized
  20.      for different hardware and product builds. -->
  21. <resources>
  22.     <!-- Software blur is too slow on this device. -->
  23.     <bool name="config_sf_slowBlur">true</bool>
  24.     <!-- This device is not "voice capable"; it's data-only. -->
  25.     <bool name="config_voice_capable">true</bool>
  26.     <!-- This device does not allow sms service. -->
  27.     <bool name="config_sms_capable">true</bool>
  28.     <!-- Enable puk unlockscreen -->
  29.     <bool name="config_enable_puk_unlock_screen">true</bool>
  30.     <!-- An Array of "[Connection name],[ConnectivityManager.TYPE_xxxx],
  31.          [associated radio-type],[priority],[restoral-timer(ms)],[dependencyMet]  -->
  32.     <!-- the 5th element "resore-time" indicates the number of milliseconds to delay
  33.          before automatically restore the default connection.  Set -1 if the connection
  34.          does not require auto-restore. -->
  35.     <!-- the 6th element indicates boot-time dependency-met value. -->
  36.     <string-array translatable="false" name="networkAttributes">
  37.         <item>"wifi,1,1,1,-1,true"</item>
  38.         <item>"mobile,0,0,0,-1,true"</item>
  39.         <item>"mobile_mms,2,0,2,60000,true"</item>
  40.         <item>"mobile_supl,3,0,2,60000,true"</item>
  41.         <item>"mobile_hipri,5,0,3,60000,true"</item>
  42.         <item>"mobile_fota,10,0,2,60000,true"</item>
  43.         <item>"mobile_ims,11,0,2,60000,true"</item>
  44.         <item>"mobile_cbs,12,0,2,60000,true"</item>
  45.         <item>"wifi_p2p,13,1,0,-1,true"</item>
  46.         <item>"eth,9,9,4,60000,true"</item>
  47.     </string-array>
  48.     <!-- An Array of "[ConnectivityManager connectionType],
  49.                       [# simultaneous connection types]"  -->
  50.     <string-array translatable="false" name="radioAttributes">
  51.         <item>"1,1"</item>
  52.         <item>"0,1"</item>
  53.         <item>"9,1"</item>
  54.     </string-array>
  55.         <!-- Minimum screen brightness setting allowed by the power manager.
  56.              The user is forbidden from setting the brightness below this level. -->
  57.     <integer name="config_screenBrightnessSettingMinimum">10</integer>
  58.     <!-- Maximum screen brightness allowed by the power manager.
  59.          The user is forbidden from setting the brightness above this level. -->
  60.     <integer name="config_screenBrightnessSettingMaximum">222</integer>
  61.         <!-- Default screen brightness setting.
  62.              Must be in the range specified by minimum and maximum. -->
  63.         <integer name="config_screenBrightnessSettingDefault">115</integer>
  64.     <!-- Screen brightness used to dim the screen when the user activity
  65.          timeout expires.  May be less than the minimum allowed brightness setting
  66.          that can be set by the user. -->
  67.     <integer name="config_screenBrightnessDim">1</integer>
  68.     <!-- Whether a software navigation bar should be shown. NOTE: in the future this may be
  69.          autodetected from the Configuration. -->
  70.     <bool name="config_showNavigationBar">false</bool>
  71.     <!-- If this is true, the screen will come on when you unplug usb/power/whatever. -->
  72.     <bool name="config_unplugTurnsOnScreen">true</bool>
  73.     <!--
  74.        Sets the package names whose certificates should be used to
  75.        verify location providers are allowed to be loaded.
  76.     -->
  77.     <string-array name="config_locationProviderPackageNames" translatable="false">
  78.         <item>com.google.android.location</item>
  79.         <item>com.android.location.fused</item>
  80.     </string-array>
  81.     <!--  Maximum number of supported users -->
  82.     <integer name="config_multiuserMaximumUsers">1</integer>
  83.     <!-- we don't want use hard menu key to unlock keyguard -->
  84.     <bool name="config_disableMenuKeyInLockScreen">true</bool>
  85.     <!-- out side base package resource, we add it -->
  86.     <add-resource type="integer" name="config_immersive_mode_confirmation_panic" />  
  87.     <add-resource type="integer" name="config_max_over_scroll" />  
  88.     <integer name="config_immersive_mode_confirmation_panic">5000</integer>
  89.     <integer name="config_max_over_scroll">200</integer>
  90. </resources>
复制代码

4、部门参数解读

config_screenBrightnessSettingDefault:设置屏幕亮度的默认值。这个值会在系统初始化时使用,范围是0到255。
config_screenBrightnessSettingMinimum:设置屏幕亮度的最低值。这个值确保屏幕亮度不会低于这个值,范围是0到255。
config_screenBrightnessSettingMaximum:设置屏幕亮度的最高值。这个值确保屏幕亮度不会高于这个值,范围是0到255。
5、使用设置

这些设置会被系统服务(如PowerManagerService、DisplayManagerService)读取并应用,详细实现可以参考前面提到的服务类。
比方,在PowerManagerService中,可以读取设置并应用默认亮度值:
  1. public void systemReady(TwilightService twilight, DreamManagerService dreamManager) {
  2.         synchronized (mLock) {
  3.             mSystemReady = true;
  4.             mDreamManager = dreamManager;
  5.             PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
  6.             mScreenBrightnessSettingMinimum = pm.getMinimumScreenBrightnessSetting();
  7.             mScreenBrightnessSettingMaximum = pm.getMaximumScreenBrightnessSetting();
  8.             mScreenBrightnessSettingDefault = pm.getDefaultScreenBrightnessSetting();
  9.             SensorManager sensorManager = new SystemSensorManager(mHandler.getLooper());
  10.             // The notifier runs on the system server's main looper so as not to interfere
  11.             // with the animations and other critical functions of the power manager.
  12.             mNotifier = new Notifier(Looper.getMainLooper(), mContext, mBatteryStats,
  13.                     createSuspendBlockerLocked("PowerManagerService.Broadcasts"),
  14.                     mScreenOnBlocker, mPolicy);
  15.             // The display power controller runs on the power manager service's
  16.             // own handler thread to ensure timely operation.
  17.             mDisplayPowerController = new DisplayPowerController(mHandler.getLooper(),
  18.                     mContext, mNotifier, mLightsService, twilight, sensorManager,
  19.                     mDisplayManagerService, mDisplayBlanker,
  20.                     mDisplayPowerControllerCallbacks, mHandler);
  21.             mWirelessChargerDetector = new WirelessChargerDetector(sensorManager,
  22.                     createSuspendBlockerLocked("PowerManagerService.WirelessChargerDetector"));
  23.             mSettingsObserver = new SettingsObserver(mHandler);
  24.             mAttentionLight = mLightsService.getLight(LightsService.LIGHT_ID_ATTENTION);
  25.             // Register for broadcasts from other components of the system.
  26.             IntentFilter filter = new IntentFilter();
  27.             filter.addAction(Intent.ACTION_BATTERY_CHANGED);
  28.             mContext.registerReceiver(new BatteryReceiver(), filter, null, mHandler);
  29.             filter = new IntentFilter();
  30.             filter.addAction(Intent.ACTION_BOOT_COMPLETED);
  31.             mContext.registerReceiver(new BootCompletedReceiver(), filter, null, mHandler);
  32.             filter = new IntentFilter();
  33.             filter.addAction(Intent.ACTION_DREAMING_STARTED);
  34.             filter.addAction(Intent.ACTION_DREAMING_STOPPED);
  35.             mContext.registerReceiver(new DreamReceiver(), filter, null, mHandler);
  36.             filter = new IntentFilter();
  37.             filter.addAction(Intent.ACTION_USER_SWITCHED);
  38.             mContext.registerReceiver(new UserSwitchedReceiver(), filter, null, mHandler);
  39.             filter = new IntentFilter();
  40.             filter.addAction(Intent.ACTION_DOCK_EVENT);
  41.             mContext.registerReceiver(new DockReceiver(), filter, null, mHandler);
  42.             // Register for settings changes.
  43.             final ContentResolver resolver = mContext.getContentResolver();
  44.             resolver.registerContentObserver(Settings.Secure.getUriFor(
  45.                     Settings.Secure.SCREENSAVER_ENABLED),
  46.                     false, mSettingsObserver, UserHandle.USER_ALL);
  47.             resolver.registerContentObserver(Settings.Secure.getUriFor(
  48.                     Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP),
  49.                     false, mSettingsObserver, UserHandle.USER_ALL);
  50.             resolver.registerContentObserver(Settings.Secure.getUriFor(
  51.                     Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK),
  52.                     false, mSettingsObserver, UserHandle.USER_ALL);
  53.             resolver.registerContentObserver(Settings.System.getUriFor(
  54.                     Settings.System.SCREEN_OFF_TIMEOUT),
  55.                     false, mSettingsObserver, UserHandle.USER_ALL);
  56.             resolver.registerContentObserver(Settings.Global.getUriFor(
  57.                     Settings.Global.STAY_ON_WHILE_PLUGGED_IN),
  58.                     false, mSettingsObserver, UserHandle.USER_ALL);
  59.             resolver.registerContentObserver(Settings.System.getUriFor(
  60.                     Settings.System.SCREEN_BRIGHTNESS),
  61.                     false, mSettingsObserver, UserHandle.USER_ALL);
  62.             resolver.registerContentObserver(Settings.System.getUriFor(
  63.                     Settings.System.SCREEN_BRIGHTNESS_MODE),
  64.                     false, mSettingsObserver, UserHandle.USER_ALL);
  65.             //--------------for hdmi timeout add by dzy
  66.             resolver.registerContentObserver(Settings.System.getUriFor(
  67.                     Settings.System.HDMI_LCD_TIMEOUT),
  68.                     false, mSettingsObserver, UserHandle.USER_ALL);
  69.             //-----------------end------------------
  70.             // Go.
  71.             readConfigurationLocked();
  72.             updateSettingsLocked();
  73.             mDirty |= DIRTY_BATTERY_STATE;
  74.             updatePowerStateLocked();
  75.             
  76.             new Thread() {
  77.             public void run() {
  78.                 boolean waitSuspendOK;
  79.                 while(true) {
  80.                     waitSuspendOK = false;
  81.                     try {
  82.                         Slog.d(TAG, "--- nativeWaitSuspendTimeout");
  83.                         nativeWaitSuspendTimeout();
  84.                         waitSuspendOK = true;
  85.                     } catch (IOException e) {
  86.                         Slog.e(TAG, "--- nativeWaitSuspendTimeout: " + e);
  87.                     }
  88.                     if (waitSuspendOK) {
  89.                         int status = -1;
  90.                         try {
  91.                             status = nativeGetChargingStatus();
  92.                             Slog.d(TAG, "--- charging status=" + status);
  93.                         }  catch (IOException e) {
  94.                             Slog.e(TAG, "--- nativeGetChargingStatus: " + e);
  95.                         }
  96.                         if (status != 1) {
  97.                             PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
  98.                             PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "suspend timeout to shutdownNormal");
  99.                             wl.acquire(5000);
  100.                             Slog.d(TAG, "--- shutdown now");
  101.                             shutdownNormal();
  102.                         }
  103.                     } else {
  104.                         try {
  105.                             Thread.sleep(500);
  106.                         } catch (InterruptedException e) {
  107.                         }
  108.                     }
  109.                 }
  110.             }
  111.         }.start();
  112.         }
  113.     }
复制代码

6、总结

通过在config.xml中设置屏幕亮度相关的参数,可以为Android系统提供默认的亮度设置和主动亮度调节的参数。这些设置会在系统服务中被读取并应用,从而影响系统的亮度控制行为。通过这种方式,开发者可以灵活地设置和管理屏幕亮度,确保提供良好的用户体验。
以为本文对您有用,麻烦点赞、关注、收藏,您的肯定是我创作的无限动力,谢谢!!!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表