2013-08-19 8 views
9

Ich brauche die aktuelle Zeit für meine Android-App. Die Zeit sollte die Zeit des Bedieners und nicht die vom Benutzer eingestellte lokale Zeit sein.Programmgesteuert erhalten Sie die Zeit des Netzbetreibers (Android)

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

Dies ist, um den Namen des Bedieners programmgesteuert zu erhalten. Aber wie bekommt man die aktuelle Zeit des Betreibers? Wenn der Benutzer die Zeit manuell geändert hat, ändert die App die aktuelle Uhrzeit des Benutzers.

Ich habe eine google search zu:

Es kann keine bessere zu finden. Wenn es bereits auf stackoverflow gefragt wird, entschuldigen Sie bitte den Link.

EDIT:

Ich vergaß zu erwähnen, dass es eine Offline-Anwendung ist, wo ich das Internet nicht die Erlaubnis des Benutzers immer bin.

Danke.

Antwort

5

Die einfache Antwort ist, dass es nicht möglich ist. Um das zu erreichen, was Sie möchten, müsste Ihre App zwei Dinge tun:

  1. senden Service-Nachricht an den Netzwerkbetreiber; und
  2. lokale Zeit auf dem Gerät ändern.

Beide dieser Vorgänge erfordern Berechtigungen auf Systemebene. Das heißt, Ihre App muss mit einem Systemschlüssel (d. H. Einer von Google an Gerätehersteller ausgegebenen Signatur) signiert sein, um auf diese Funktionen zugreifen zu können.

Was Sie können tun, ist die aktuelle Zeit von einem NTP-Server erhalten. Es gibt viele kostenlose NTP-Server im Internet. Ein Codebeispiel zu dem Zeitpunkt, zu erhalten, ist dies:

String timeServer = "server 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); 

Jetzt Ihr cal Objekt die Echt Zeit vom NTP-Server und nicht die Zeit, von der Vorrichtung enthält. Trotzdem können Sie die Uhrzeit nicht als aktuelle Uhrzeit des Geräts festlegen.

+0

Benötigt es eine Internetverbindung? Ich habe vergessen zu erwähnen, dass es sich um eine Offline-App handelt, bei der der Zugriff auf die Internet-Erlaubnis nicht verlangt wird. –

+1

Ja, dies erfordert eine Internetverbindung. Wenn einer nicht verfügbar ist, können Sie keine andere Zeit als die auf dem lokalen Gerät abrufen. –

+0

Ich denke, Sie müssen das "Server" -Bit aus der Adresse entfernen und Sie erhalten die tatsächliche Zeit mit 'timeInfo.getMessage(). GetTransmitTimeStamp(). GetTime()' – lane

Verwandte Themen