2016-03-19 2 views
0

Я сделал приложение, которое синхронизирует данные данных через устройства в зависимости от времени эпохи. Сейчас я получаю это время эпохального с помощью REST API на сервере с помощью HttpURLConnection следующим образом:Является ли время Android одинаковым во всех устройствах

public static String getTime(String time){ 
    InputStream is = null; 
    BufferedReader bufferedReader = null; 
    HttpURLConnection urlConnection = null; 

    try{ 
     URL url = new URL(SERVERURL); 
     urlConnection = (HttpURLConnection) url.openConnection(); 
     is = urlConnection.getInputStream(); 
     bufferedReader = new BufferedReader(new InputStreamReader(is,"UTF-8")); 
     StringBuilder stringBuilder = new StringBuilder(); 
     String line = null; 

     while((line = bufferedReader.readLine()) != null){ 
      stringBuilder.append(line); 
     } 

     JSONObject jsonObject = new JSONObject(stringBuilder.toString()); 

     return jsonObject.getString("time"); 


    } 
    catch(JSONException e){ 
     Log.d("getTime","json object creation failed"); 
    } 
    catch(IOException e){ 
     Log.d("getTime", "couldn't get time from server"); 
    } 
    finally { 
     try { 

      if(urlConnection != null){ 
       urlConnection.disconnect(); 
      } 
      if(bufferedReader != null) { 
       bufferedReader.close(); 
      } 

      if(is != null){ 
       is.close(); 
      } 
     } 
     catch(IOException e){ 
      Log.d("async getGameName","io exception closing buffer"); 
     } 
    } 

    return time; 
} 

так, что все устройства получают метку времени от одного известного источника. Этот метод работает в фоновом режиме, поэтому он не замедляет работу приложения, но он не дает хорошего пользовательского опыта, потому что мне нужна эта метка времени, чтобы отображать информацию пользователю, а запрос http занимает много времени. Несколько раз до минуты, потому что это зависит от сетевого подключения, поэтому я хотел спросить, является ли время локальной эпохи одинаковым для всех устройств Android, и если это лучший способ получить временную метку эпохи на андроиде? Заранее спасибо.

+0

Не существует гарантированного универсального времени для всех устройств Android, поскольку все их часы могут отличаться. Точная синхронизация времени - довольно сложная проблема, как вы обнаружили. –

ответ

0

Время эпохи зависит от синхронизации времени устройства, поэтому для двух устройств могут быть разные значения.

Кроме того, получение информации времени от конечной точки REST не представляется наиболее эффективным способом, так как вы также вводите потенциальные задержки на конечной точке API в дополнение к общей задержке сети.

Поскольку устройства Android используют сервер NTP, чтобы получить свое время, почему бы вам не получить информацию о времени от самого устройства и преобразовать его в эпоху? Само устройство уже получает обновленную информацию о времени, поэтому вы можете просто использовать это.

Если вы хотите, чтобы получить текущее значение века из самого устройства вы можете использовать [currentTimeMillis()][1]:

System.currentTimeMillis()/1000 

Это возвращает количество миллисекунд, так, чтобы получить значение века, которое в считанные секунды, просто разделите на 1000.

+0

Не могли бы вы посоветовать мне api использовать, чтобы получить timestamp? –

+0

@JeanCarlosHenriquez Я обновил ответ, надеюсь, что это поможет. – user1301428