以编程方式获取网络运营商的时间(android)
Posted
技术标签:
【中文标题】以编程方式获取网络运营商的时间(android)【英文标题】:Programmatically get the network operator's time (android) 【发布时间】:2013-08-21 04:44:39 【问题描述】:我需要获取我的 android 应用程序的当前时间。时间应该是运营商的时间,而不是用户设置的本地时间。
TelephonyManager telephonyManager =((TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE));
String operatorName = telephonyManager.getNetworkOperatorName();
这是以编程方式获取操作员的名称。但是如何获取运营商的当前时间呢?如果用户手动更改了时间,则应用程序会将其更改为操作员的当前时间。
我也做了google search:
找不到更好的。如果它已经在 *** 上询问过,请原谅并提供链接。
编辑:
我忘了提到它是一个离线应用程序,我没有从用户那里获得互联网许可。
谢谢。
【问题讨论】:
现在是 2019 年,但我仍然没有得到答案! :( 【参考方案1】:简单的答案是无法做到。为了完成你想要的,你的应用需要做两件事:
-
向网络运营商发送服务消息;和
更改设备上的本地时间。
这两个操作都需要系统级权限。也就是说,您的应用需要使用系统密钥(即由 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 服务器的实际时间,而不是来自设备的时间。不过,您将无法将时间设置为设备的当前时间。
【讨论】:
是否需要互联网连接?我忘了提到它是一个离线应用程序,不需要访问互联网权限。 是的,这需要互联网连接。如果一个不可用,那么您将无法获得除本地设备上的时间之外的时间。 我认为您需要从地址中删除“服务器”位,然后您将获得timeInfo.getMessage().getTransmitTimeStamp().getTime()
的实际时间以上是关于以编程方式获取网络运营商的时间(android)的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式在 Android(KitKat 及更高版本)中添加 APN
如何以编程方式获取android手机的IP地址......? [复制]
如何在 Android 上以编程方式从 Mac 地址获取 IP 地址?