11

Android アプリの現在の時刻を取得する必要があります。時間は、ユーザーが設定した現地時間ではなく、オペレーターの時間でなければなりません。

TelephonyManager telephonyManager =((TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE));
String operatorName = telephonyManager.getNetworkOperatorName();

これは、オペレーターの名前をプログラムで取得するためのものです。しかし、オペレーターの現在の時刻を取得するにはどうすればよいでしょうか? ユーザーが時間を手動で変更した場合、アプリはそれをオペレーターの現在の時間に変更します。

私もグーグル検索をしました:

より良いものを見つけることができません。スタックオーバーフローで既に質問されている場合は、申し訳ありませんが、リンクを提供してください。

編集:

ユーザーからインターネットの許可を得ていないオフラインアプリであることを忘れていました。

ありがとう。

4

1 に答える 1

6

簡単な答えは、それはできないということです。目的を達成するために、アプリは次の 2 つのことを行う必要があります。

  1. サービス メッセージをネットワーク オペレータに送信します。と
  2. デバイスの現地時間を変更します。

これらの操作には、システム レベルの権限が必要です。つまり、これらの機能にアクセスするには、アプリがシステム キー (つまり、Google がデバイス メーカーに発行したもの) で署名されている必要があります。

できることは、NTP サーバーから現在の時刻を取得することです。インターネット上には無料で使用できる NTP サーバーがたくさんあります。このような時間を取得するサンプル コードは次のとおりです。

String timeServer = "0.pool.ntp.org";

NTPUDPClient timeClient = new NTPUDPClient();
InetAddress inetAddress = InetAddress.getByName(timeServer);
TimeInfo timeInfo = timeClient.getTime(inetAddress);
long returnTime = timeInfo.getReturnTime();

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(returnTime);

オブジェクトには、デバイスからの時間ではなく、NTP サーバーからのリアルタイムcalが含まれるようになりました。それでも、デバイスの現在の時刻として時刻を設定することはできません。

于 2013-08-19T12:10:33.233 に答える