TCPソケットを介して別のAndroid携帯電話またはPCに送信するAndroidアプリケーションがあり、送信者と受信者のクロックを同期させたい。androidでSystemClock.setCurrentTimeMillisを試しましたが、権限android.permission.SET_TIMEを使用しても機能しません。別の方法はありますか?
2 に答える
残念ながら、android.permission.SET_TIMEを設定する権限がないため、Androidフォンの時刻をコードから変更することはできません。ルート化された電話でのみ変更できます。
だから、インターネット時間のような信頼できるソースから両方のアプリケーションを更新させてみませんか。多分アンドロイドsntpクライアントを使用してください
//Sample usage:
SntpClient client = new SntpClient();
if (client.requestTime("time.nist.gov")) {
long now = client.getNtpTime() + SystemClock.elapsedRealtime() - client.getNtpTimeReference();
}
または、あなたができることは次のとおりです。データを受信するために使用しているプログラムを介して、携帯電話の現在の時刻をPCに送信し、PCの時刻を設定します。こちらもご覧ください:モバイルの日時を設定する
私はあなたのアプリケーションを知りませんが、そのようなクロックを同期させることは少しパッチのようです。そのためには、NTP(ネットワークタイムプロトコル)を使用することをお勧めします。Androidだけでなく、Windows、MAC、Linuxマシンでもそれが可能です。あなたのAndroidマシンはセルタワーまたはWIFIからそれを行います。最近、Android用のセルモデムを移植しました。ログを詳しく調べたところ、ネットワークが接続されるたびに、1日に数回、時刻の同期が非常に頻繁に行われていることがわかりました。ネットワークソース(セルまたはwifi)を切り替える場合でも、かなり正確です。シンプルで、コードを書く必要はありません。有効にするように設定するだけです。
結果は、公式のネットワークソースから設定されたPCとAndroidの時間です。