11

我需要获取我的 android 应用程序的当前时间。时间应该是运营商的时间,而不是用户设置的本地时间。

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

这是以编程方式获取操作员的名称。但是如何获取运营商的当前时间呢?如果用户手动更改了时间,则应用程序会将其更改为操作员的当前时间。

我也做了谷歌搜索

找不到更好的了。如果它已经在 stackoverflow 上询问过,请原谅并提供链接。

编辑:

我忘了提到它是一个离线应用程序,我没有从用户那里获得互联网许可。

谢谢。

4

1 回答 1

6

简单的答案是无法做到。为了完成你想要的,你的应用需要做两件事:

  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);

现在您的cal对象包含来自 NTP 服务器的实时时间,而不是来自设备的时间。不过,您将无法将时间设置为设备的当前时间。

于 2013-08-19T12:10:33.233 回答