Как Google определяет, когда включать / отключать ночной режим? - PullRequest
0 голосов
/ 06 мая 2018

Что я пытаюсь сделать

В настоящее время я создаю приложение, используя , и я нахожусь на перепутье. Я использую приложение Google Maps на своем iPhone, и оно автоматически переключается на Ночной режим в какое-то время вечером. Проблема в том, что я понятия не имею, какой метод используется для определения этого времени.

Как я думал об этом

Я подумал о нескольких вариантах определения того, когда Ночной режим должен активироваться, но все они кажутся неточными или частично ошибочными:

  • Используйте геолокацию время заката и затем включите Ночной режим . Смотрите мою правку о сумеречном времени ниже.
    • Хотя я думаю, что это обеспечивает большую точность, я заметил, что время немного смещено: см. Редактирование Data для сравнения времени.
  • Используйте встроенные датчики / камеру на устройстве.
    • Хотя это может работать, оно по своей сути некорректно, так как освещение меняется в зависимости от среды пользователя. Постоянное изменение темы между комнатами определенно будет раздражать пользователей.
    • Я также не уверен, какие датчики встроены в каждое устройство. Я знаю, что у iPhone есть Датчик освещенности , но я не уверен, какие датчики есть у других устройств (в частности, у Android).

На данный момент мой лучший метод - использовать комбинацию обоих: на основе заката разработать какой-то алгоритм, который принимает время заката, и временной буфер , который использует встроенные датчики / камера, чтобы определить, когда окружающий свет падает за определенный предел. Если на устройстве нет датчика освещенности, я бы просто использовал время заката для геолокации пользователя.

Вопрос

Таким образом, мой вопрос остается в названии моего вопроса: Как Google Maps определяет , когда тема должна измениться на / с Ночной режим на устройстве?

Дополнительно (но не обязательно): использует какие-либо методы, чтобы помочь разработчикам легко выполнить эту задачу?

P.S. Я не уверен, какой тег применять для ночного режима / темной темы (или как его еще называют), поэтому дайте мне знать, если у вас есть какие-либо предложения (я не думаю, что необходимо создавать новый тег).



Редактирование

Время заката

Как предложил Херб Вулф в комментариях под моим вопросом, возможно, Google использует время заката для переключения тем. Я определенно могу добавить это к моей существующей логике, чтобы сделать ее более точной . См. Data edit ниже для получения дополнительной информации.


Данные

Мне сложно собирать эти данные, поэтому я буду медленно публиковать их здесь, когда у меня будет возможность. Время заката и сумерек ниже показано через 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

Источники

1 Ответ

0 голосов
/ 25 июня 2019

Как вы уже догадались, Google Maps, вероятно, использует комбинацию данных с датчика внешней освещенности и времени, чтобы определить, переключаться ли в темный режим. Насколько я знаю, код Google Maps является частной собственностью, поэтому мы можем только догадываться, как они его реализовали.

Однако, давайте посмотрим немного в будущее. Как Android, так и iOS недавно добавили поддержку темного режима в свои приложения, и вы можете предоставить атрибут darkTheme для вашего MaterialApp, что позволит ему автоматически адаптироваться к предпочтениям пользователей. Рано или поздно Google Maps, вероятно, также будет использовать этот OS API, поэтому ваш лучший способ имитировать поведение Google Maps - использовать darkTheme.

(Технически, вы также можете взглянуть на растровые данные виджета Google Maps и затем решить, использует ли он темный или светлый режим, основываясь на средней яркости или цветовой палитре пикселей, но это выглядит как обходной путь -й способ сделать это.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...