2016-07-09 2 views
0

Я читал, что использование System.exit(0) нахмурилось, когда дело доходит до Java и Android, но пока я не могу найти альтернативы тому, что я пытаюсь выполнить. Чтобы быть понятным, это для Watchface, который является просто сервисом, распространяющимся на CanvasWatchFaceService. В этом случае я не могу позвонить finish(). Я также пробовал stopService и startService без каких-либо успехов.System.exit (0) в Android Wear Watchface?

Проблема, которую я пытаюсь решить: Это хорошо известно, что изменение часовых поясов на устройстве не будет отражаться на это, если циферблат не будет перезапущен. В своем тестировании я обнаружил, что System.currentTimeMillis() вполне буквально не реагирует на изменения часовых поясов в Android Wear. Сторону необходимо перезапустить, чтобы она отображала правильное время после изменения часового пояса.

Так что я построил систему со следующим кодом:

private final BroadcastReceiver timeChangeReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     final String action = intent.getAction(); 

     if (!restarting) { 
      if (action.equals(Intent.ACTION_TIMEZONE_CHANGED)) { 
       if (upSeconds >= 15) { 
        System.exit(0); 
       } else { 
        restarting = true; 
        int delay = ((15 - upSeconds) * 1000); 

        new CountDownTimer(delay, delay) { 
         @Override 
         public void onTick(long millisUntilFinished) { } 
         @Override 
         public void onFinish() { 
          System.exit(0); 
         } 
        }.start(); 
       } 
      } 
     } 
    } 
}; 

Задержка в случае, если пользователь инициирует изменение часового пояса чаще, чем 15 секунд, в то время. Android Wear, похоже, обнаруживает выходы системы, которые являются слишком частыми, и заменяют часы «простым» наружным зеркалом.

Кажется, что отлично работает, Android Wear автоматически загружает рельеф заднего вида при выходе. Но в конечном итоге я хотел бы разместить это приложение в Google Play Store, поэтому я подумал, что должен убедиться, что здесь не играю с огнем.

+0

Вы видели: http://stackoverflow.com/questions/11257449/system-exit-in-android? Возможный дубликат. –

+0

Спасибо за ссылку! Это помогает, но это не полностью отвечает на мой вопрос. Мой вопрос касается «CanvasWatchFaceService» в Android Wear. – nope4561759

+1

Весь код в [watchface training] (https://developer.android.com/training/wearables/watch-faces/drawing.html) отлично справляется с изменениями часового пояса. Почему, по-вашему, вам нужно выйти, чтобы получить время для обновления? – ianhanniballake

ответ

0

Не могу поверить, что я прошел через все эти работы, когда правильное решение было настолько простым. Спасибо ianhanniballake за ссылку!

Посмотрев на Analog Watchface Sample, я обнаружил, что все, что мне нужно было, это использовать mCalendar.setTimeZone(TimeZone.getDefault());. Во многих местах я сравнивал время в миллисекундах с long now = System.currentTimeMillis();, поэтому я просто сделал now = mCalendar.getTimeInMillis(), чтобы позаботиться об этом.

Теперь часовой пояс изменяет время, когда изменяется часовой пояс. Я полагаю, что другие наблюдаемые мной интерфейсы не справились с этим!