以编程方式获取networking运营商的时间(android)

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

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

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

我也做了谷歌search :

无法find一个更好的。 如果它已经在stackoverflow上请求,请原谅,请提供链接。

编辑:

我忘了提及,这是一个离线的应用程序,我没有得到用户的互联网许可。

谢谢。

Solutions Collecting From Web of "以编程方式获取networking运营商的时间(android)"

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

  1. 向networking运营商发送业务消息; 和
  2. 更改设备上的本地时间。

这两个操作都需要系统级权限。 也就是说,您的应用程序需要使用系统密钥(即Google向设备制造商发行的密钥)进行签名才能访问这些function。

可以做的是从NTP服务器获取当前时间。 互联网上有许多免费使用的NTP服务器。 获得这样的时间的示例代码是这样的:

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

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