【问题标题】:How Google Determines When To Enable/Disable Night Mode?Google 如何确定何时启用/禁用夜间模式?
【发布时间】:2018-05-06 01:10:37
【问题描述】:

我想要做什么

我目前正在使用 创建一个应用程序,我正处于十字路口。我在 iPhone 上使用 Google 地图应用程序,它会在晚上的某个时间自动切换到 夜间模式。问题是我不知道使用哪种方法来确定那个时间。

我是如何考虑这样做的

我想了几个选项来确定何时应该激活夜间模式,但它们似乎都不准确或存在部分缺陷:

  • 使用地理位置的日落时间然后触发夜间模式。请参阅下面我对黄昏时间的编辑。
    • 虽然我认为这提供了很高的准确性,但我注意到时间略有偏差:请参阅数据编辑以进行时间比较。
  • 使用设备上的内置传感器/摄像头。
    • 虽然这可能有效,但它存在本质上的缺陷,因为照明会根据用户的环境而变化。在房间之间不断改变主题肯定会惹恼用户。
    • 我也不确定每个设备中内置了哪种传感器。我知道 iPhone 有一个环境光传感器,但我不确定其他设备有哪些传感器(尤其是 Android)。

目前,我最好的方法是结合使用这两种方法:基于日落,设计某种算法来获取日落时间和使用内置的 时间缓冲区传感器/摄像头来确定环境光何时超过特定限制。如果设备没有光传感器,那么我会简单地回退到用户地理位置的日落时间。

问题

所以我的问题仍然是我的问题的标题:Google 地图如何决定主题应何时在设备上更改为夜间模式 ?

另外(但不是必需的): 是否采用任何方法来帮助开发人员轻松完成这项任务?

附:我不确定要为夜间模式/黑暗主题应用哪个标签(或其他人称之为),所以如果您有任何建议,请告诉我(我认为没有必要创建新标签)。



编辑

黄昏时间

正如 Herb Wolfe 在我的问题下方的 cmets 中所建议的那样,也许 Google 正在使用 dusk time 来切换主题。我绝对可以将其添加到我现有的逻辑中以使其更准确。有关详细信息,请参阅下面的数据编辑。


数据

我很难收集这些数据,所以有机会我会在这里慢慢发布。下面的日落和黄昏时间是通过 Google 检索的(参见下面的来源)。平均值是当天日落时间和黄昏时间之间的平均值。主题时间由我手动收集。

Date              Sunset     Dusk       Average    Theme
May 5th, 2018     8:25PM     8:57PM     8:41PM     8:40PM
May 29th, 2018    8:50PM     9:25PM     9:07:30PM  9:06PM

来源

【问题讨论】:

  • 您的首选是黄昏而不是日落吗?
  • @HerbWolfe 谢谢!这确实有助于通过平均日落和黄昏之间的时间来更好地集中时间,但时间差一分钟。对我来说可能是不准确的,但我会在下周尝试收集更多的时间数据来确认。我已编辑我的问题以包含您的建议和其他相关信息。
  • @downvoters 你能帮我理解你为什么不赞成我的问题,以便我改进它吗?在没有解释的情况下对问题投反对票,不仅不会让用户有机会改善他们的问题,也不会改善整个 SO 社区。​​span>
  • @ctwheels 据我所知,谷歌地图的代码是专有的,所以我们只能推测他们是如何实现的。这可能就是您的问题被否决的原因 - StackOverflow 问题应该简洁并提供要解决的具体问题,而不是导致开放式讨论和猜测。

标签: flutter flutter google-maps flutter


【解决方案1】:

另外(但不是必需的):Flutter 是否采用任何方法来帮助开发人员轻松完成这项任务?

从 Flutter 1.9 开始 - 在运行时,您可以检查 MediaQuery.of(context).platformBrightness - 在任何 Widget 的 build 方法中。这将返回Brightness.lightBrightness.dark,它基本上告诉您设备的深色主题状态是什么(分别未设置/设置)。

【讨论】:

    【解决方案2】:

    就像你猜的一样,谷歌地图可能会结合环境光传感器的数据和时间来确定是否切换到暗模式。 据我所知,谷歌地图代码是专有的,所以我们只能推测他们是如何实现的。

    但是,让我们展望一下未来。 Android 和 iOS 最近都在他们的应用程序中引入了暗模式支持,您可以为您的 MaterialApp 提供 darkTheme 属性,使其能够自动适应用户的偏好。 迟早,Google Maps 也可能会使用此 OS API,因此模仿 Google Maps 行为的最佳方法是使用darkTheme

    (从技术上讲,您还可以查看 Google 地图小部件的位图数据,然后根据像素的平均亮度或调色板决定它是使用暗模式还是亮模式,但这似乎是一种非常有效的解决方法-y 这样做的方式。)

    【讨论】:

      【解决方案3】:

      只是举一个马塞尔在他的回答中已经说过的例子。如果您在 MaterialApp Widget 中分别设置了主题和黑暗主题,以及它们的亮度值,您的应用将根据设备的需要在明暗模式之间切换。

      Here 是关于 Theme Mode 的 Flutter 文档,它决定了使用哪个主题(默认为 ThemeMode.system)。

      return MaterialApp(
        theme: ThemeData(
          brightness: Brightness.light,
          primarySwatch: Colors.lightBlue,
        ),
        darkTheme:
            ThemeData(
              brightness: Brightness.dark, 
              primarySwatch: Colors.orange)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-02
        • 2018-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多