2013-05-13 3 views
2

Уважаемые разработчики Android,Получить время NTP-сервера из Android App

Я пытаюсь реализовать класс sntpclient в моем приложении, но это не сработало.

Класс: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/android/net/SntpClient.java

в моем коде у меня есть следующие строки:

public void onClickBtn(View v) 
{ 
    SntpClient client = new SntpClient(); 
    if (client.requestTime("pool.ntp.org", 10)) { 
     long now = client.getNtpTime() + SystemClock.elapsedRealtime() - client.getNtpTimeReference(); 
     Toast.makeText(this, "Offset: " + now, Toast.LENGTH_LONG).show(); 
    } 
} 

Я действительно не знаю, что смысл сети тайм-аут в этом случае.

Было бы здорово, если у кого-нибудь есть идея или подсказка для меня.

Заранее благодарен!

+0

что вопрос Что происходит ? –

+0

ничего не происходит. Я не знаю, что я должен ввести для «сетевого тайм-аута», в настоящее время это «10» ... – Marcus

+0

Я не думаю, что это может быть проблема. Вы отлаживали приложение и проверяли, будет ли он проходить внутри блока 'if' ? –

ответ

2

Вы должны поместить его в AsyncTask так:

class GetNTPAsynctask extends AsyncTask<String, Void, Boolean> { 

@Override 
     protected Boolean doInBackground(String... params) { 
      private SntpClient sntpClient = new SntpClient(); 
      return sntpClient.requestTime("pool.ntp.org", 30000); 
     } 
} 

Время ожидания: сеть ожидания в миллисекундах. Поэтому я использую 30000 за 30 секунд.

1

Вы можете использовать этот Полный образец:

class getCurrentNetworkTime extends AsyncTask<String, Void, Boolean> { 

    private Exception exception; 

    protected Boolean doInBackground(String... urls) { 
     NTPUDPClient timeClient = new NTPUDPClient(); 
     timeClient.setDefaultTimeout(3000); 
     InetAddress inetAddress = null; 
     boolean is_locale_date = false; 
     try { 
      inetAddress = InetAddress.getByName(G.TIME_SERVER); 
      TimeInfo timeInfo = null; 
      timeInfo = timeClient.getTime(inetAddress); 
      long localTime = timeInfo.getReturnTime(); 
      long serverTime = timeInfo.getMessage().getTransmitTimeStamp().getTime(); 
      if (new Date(localTime) != new Date(serverTime)) 
       is_locale_date = true; 

     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
      Log.e("UnknownHostException: ", e.getMessage()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      Log.e("IOException: ", e.getMessage()); 
     } 
     return is_locale_date; 
    } 

    protected void onPostExecute(boolean local_date) { 
     if(!local_date) { 
      Log.e("Check ", "dates not equal" + local_date); 
     } 
    } 
} 

Как использовать:

new getCurrentNetworkTime().execute(); 
0

Убедитесь, что ваш манифеста это один:

<uses-permission android:name="android.permission.INTERNET" /> 
Смежные вопросы