| <html devsite><head> |
| <title>实现夜间模式</title> |
| <meta name="project_path" value="/_project.yaml"/> |
| <meta name="book_path" value="/_book.yaml"/> |
| </head> |
| <body> |
| <!-- |
| Copyright 2017 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <p> |
| 研究表明,屏幕的蓝光会对睡眠质量造成不良影响。Android 7.1.1 具备一种称为“夜间模式”的功能,可减少设备显示屏发出的蓝光量,以便达到更接近用户当前时间和地点的自然光效果。Android 8.0 提供一项功能,可让用户更好地控制夜间模式效果的强度。 |
| </p> |
| <p> |
| 夜间模式需要实现 <a href="/devices/graphics/implement-hwc.html">Hardware Composer HAL 2.0</a> (HWC 2),它可根据传递到 <code>setColorTransform</code> 的矩阵进行着色,而不会影响耗电量、性能和应用兼容性。 |
| </p> |
| <h2 id="implementation">实现</h2> |
| <p> |
| 设备制造商可以使用以下文件中定义的下列标记来启用该功能的默认实现:<code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml"> |
| /android/frameworks/base/core/res/res/values/config.xml</a></code> |
| |
| </p><pre class="devsite-click-to-copy"> |
| <!-- Control whether Night display is available. This should only be enabled |
| on devices with HWC 2 color transform support. --> |
| <bool name="config_nightDisplayAvailable">false</bool> |
| <!-- Default mode to control how Night display is automatically activated. |
| One of the following values (see NightDisplayController.java): |
| 0 - AUTO_MODE_DISABLED |
| 1 - AUTO_MODE_CUSTOM |
| 2 - AUTO_MODE_TWILIGHT |
| --> |
| <integer name="config_defaultNightDisplayAutoMode">0</integer> |
| <!-- Default time when Night display is automatically activated. |
| Represented as milliseconds from midnight (e.g. 79200000 == 10pm). --> |
| <integer name="config_defaultNightDisplayCustomStartTime">79200000</integer> |
| <!-- Default time when Night display is automatically deactivated. |
| Represented as milliseconds from midnight (e.g. 21600000 == 6am). --> |
| <integer name="config_defaultNightDisplayCustomEndTime">21600000</integer> |
| |
| <!-- Minimum color temperature, in Kelvin, supported by Night display. --> |
| <integer name="config_nightDisplayColorTemperatureMin">2596</integer> |
| <!-- Default color temperature, in Kelvin, to tint the screen when Night display is |
| activated. --> |
| <integer name="config_nightDisplayColorTemperatureDefault">2850</integer> |
| <!-- Maximum color temperature, in Kelvin, supported by Night display. --> |
| <integer name="config_nightDisplayColorTemperatureMax">4082</integer> |
| </pre> |
| <p> |
| 这段代码包含用于框架、系统服务、SystemUI 和设置的代码: |
| </p> |
| <pre class="devsite-click-to-copy"> |
| platform/frameworks/base/core |
| ├ java/android/provider/Settings.java |
| ├ java/com/android/internal/app/NightDisplayController.java |
| └ res/res/values/config.xml |
| |
| platform/frameworks/base/proto/src/metrics_constants.proto |
| |
| platform/frameworks/base/services |
| ├ core/java/com/android/server/display/DisplayManagerService.java |
| ├ core/java/com/android/server/display/DisplayTransformManager.java |
| ├ core/java/com/android/server/display/NightDisplayService.java |
| └ java/com/android/server/SystemServer.java |
| |
| platform/frameworks/base/packages/SystemUI |
| ├ res/drawable/ic_qs_night_display_off.xml |
| ├ res/drawable/ic_qs_night_display_on.xml |
| ├ res/values/strings.xml |
| └ src/com/android/systemui/qs/tiles/NightDisplayTile.java |
| |
| platform/packages/apps/Settings |
| ├ AndroidManifest.xml |
| ├ res/drawable/ic_settings_night_display.xml |
| ├ res/values/strings.xml |
| ├ res/xml/display_settings.xml |
| ├ res/xml/night_display_settings.xml |
| ├ src/com/android/settings/Settings.java |
| ├ src/com/android/settings/dashboard/conditional/NightDisplayCondition.java |
| ├ src/com/android/settings/display/NightDisplayPreference.java |
| ├ src/com/android/settings/display/NightDisplayPreferenceController.java |
| └ src/com/android/settings/display/NightDisplaySettings.java |
| </pre> |
| |
| <h2 id="ui-features">界面功能</h2> |
| <p> |
| 由于夜间模式是面向用户的功能,因此用户需要能够掌控这项功能。Android 开源项目 (AOSP) 的 <a href="https://android.googlesource.com/platform/packages/apps/Settings/">packages/apps/Settings</a> 项目中提供了全面的设置实现方法,以供设备制造商在实现其设置时参考。实现人员必须处理 <code><a href="https://developer.android.com/reference/android/provider/Settings.html#ACTION_NIGHT_DISPLAY_SETTINGS">Settings.ACTION_NIGHT_DISPLAY_SETTINGS</a></code> intent 才能显示此设置。 |
| </p> |
| <h3 id="settings">设置</h3> |
| <p> |
| 用户可以在“设置”>“显示”>“夜间模式”中设置夜间模式。<em></em>在设置页面中,用户可以了解夜间模式,设置其时间安排以及开启或关闭夜间模式。 |
| </p> |
| <ul> |
| <li><strong>自动开启</strong> |
| <ul> |
| <li><strong>永不</strong>:夜间模式一律不自动开启,且必须通过手动切换<strong>开启/关闭</strong>开关来启用。</li> |
| <li><strong>自定义时间安排</strong>:夜间模式在指定的<strong>开始时间</strong>(默认为晚上 10:30)开启,并在指定的<strong>结束时间</strong>(默认为早上 6:30)关闭。</li> |
| <li><strong>日落到日出</strong>:在日落时开启夜间模式,在日出时关闭夜间模式。日出和日落的时间取决于设备所处的位置和当地的时节。</li> |
| </ul> |
| </li> |
| <li><strong>开启/关闭</strong>:用于控制夜间模式当前状态的切换开关。此状态遵循现有的自动规则。例如,如果用户在下午 5:30 开启夜间模式(早于自动规则的开启时间,即晚上 10:30),则系统依然会在早上 6:30 关闭夜间模式。如果用户在早上 5:30 关闭夜间模式(早于自动规则的关闭时间,即早上 6:30),则系统依然会在晚上 10:30 开启夜间模式。</li> |
| <li><strong>强度</strong>:通过从暖色调滑动到冷色调来控制着色程度的<a href="https://developer.android.com/reference/android/widget/SeekBar.html">拖动条</a>。在未启用夜间模式时,可以停用拖动条。</li> |
| <li><strong>信息性文本</strong>:向用户介绍夜间模式的功能和原理。</li> |
| </ul> |
| <h3 id="settings-conditional">设置条件语句</h3> |
| <p> |
| 当夜间模式处于开启状态时,用户可以在“设置”顶部看到。 |
| </p> |
| <h3 id="quick-settings-tile">“快捷设置”图块</h3> |
| <p> |
| 用户可以通过“快捷设置”图块执行相应操作,也可以通过“设置”>“显示”>“夜间模式”中的<strong>开启/关闭</strong>切换开关执行相应操作,两者效果是一样的。<em></em> |
| </p> |
| |
| </body></html> |