web-dev-qa-db-ja.com

リアルタイムを取得-デバイス設定時間ではありませんandroid

Real Geographical Timeを見つける方法、私のアプリケーションのように、私は自分のアプリケーションにリアルタイムを添付したいと思います。

そのため、ユーザーがデバイスの時刻を変更した場合、実際の実勢時刻のみを取得する必要があります。デバイスの時刻は取得しません。

私の質問は非常に紛らわしいですが、簡単な言語で理解してみてください-

私はデバイス時間を必要としない、私はいつでも実際の一般的な時間を必要とする

27
Dwivedi Ji

NTP(Network Time Protocol)プロトコル)を使用する必要があります:

これが私がどこかで見つけたいくつかのコードです...そして私はそれを使用しています。これは、Gradleを使用してインストールできるApache Commonsライブラリを使用します(commons-net:commons-net:3.6への依存関係を追加します)

タイムサーバーのリストが必要な場合は、以下を確認してください。 http://tf.nist.gov/service/time-servers.html

ここにいくつかのJava使用するコードがあります:

public class TimeLookup {
    public static final String TIME_SERVER = "time-a.nist.gov";

    public static void main(String[] args) throws Exception {
        NTPUDPClient timeClient = new NTPUDPClient();
        InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
        TimeInfo timeInfo = timeClient.getTime(inetAddress);
        long returnTime = timeInfo.getReturnTime();
        Date time = new Date(returnTime);
        System.out.println("Time from " + TIME_SERVER + ": " + time);
    }

}

Androidコードはバックグラウンドスレッドで実行し、gradleの依存関係を含める必要があることに注意してください。

implementation 'commons-net:commons-net:3.6'
9
Gaurav Arora

そのような時間を取得するためのAndroid APIはありません。ユーザーはいつでもデバイスの時間を変更できますが、それについては何もできません。

最善の策は、時間を取得できるWebサービスを使用してサーバーを実行することです。サーバーを制御しているので、サーバーが正しい時刻を返すようにすることができます。

4
Raghav Sood