Sony SmartWatch 2: необходимо изменить поддержкуLowPowerMode () во время выполнения

У меня есть приложение для SW2, у которого есть пользовательский вариант, должен ли приложение использовать режим с низким энергопотреблением (LPM). Это прекрасно работает. Проблема в том, что SW API только вызывает метод поддержки методаLowPowerMode () моего приложения один раз, когда он сначала запускается. Это означает, что если пользователь позже изменит настройку в моем приложении, он не вступит в силу до тех пор, пока весь shebang не перезапустится.

Я попробовал несколько трюков (например, убил процесс моего приложения), чтобы заставить перезагрузить, но пока ничего не сделано. Мой последний курорт говорит пользователю, что он / она нуждается в перезагрузке телефона до того, как это вступит в силу, но это довольно hokey. Есть ли способ лучше?

Решение заключается не в том, чтобы попытаться изменить ваш ответ на supportsLowPowerMode() во время выполнения, а вместо этого начать и остановить ваше расширение.

В принципе, если ваше расширение может поддерживать LPM, тогда оно должно возвращать значение true в supportsLowPowerMode() . Если использование LPM расширения может измениться, вы onActiveLowPowerModeChange() с этим, просто выполнив разные действия в обработчике onActiveLowPowerModeChange() . В частности, если пользователь выбрал НЕ использовать LPM, вы хотите, чтобы обработчик выглядел следующим образом:

 @Override public void onActiveLowPowerModeChange(boolean lowPowerModeOn) { super.onActiveLowPowerModeChange(lowPowerModeOn); if (lowPowerModeOn) { // User doesn't want to use LPM, so stop the app on the SW stopRequest(); } } 

Это приведет к отключению вашего внутреннего абонента, когда подсветка устройства отключится, и он вернется к своей базовой панели LPM по умолчанию.

EDIT: Я снова открываю это, поскольку обнаружил неприемлемый побочный эффект вышеупомянутой техники. Если ваше приложение возвращает false для supportsLowPowerMode() , SW2 будет продолжать работать (но приостанавливается) в фоновом режиме, когда часы переходят в спящий режим. Это означает, что когда пользователь «просыпается» SW2, ваше приложение сразу же появится на экране. Вызов stopRequest() (как в моем примере кода выше) нарушает это поведение, требуя от пользователя повторно открыть приложение после пробуждения SW2. Я не нашел никакого способа обойти это; Для этого требуется pauseRequest() , но API не имеет этого.

Насколько я знаю, нет возможности изменить это во время выполнения. Позвольте мне дважды проверить мою команду, хотя на всякий случай есть способ, о котором я не знаю.