以编程方式获取网络运营商';s时间(android)
我需要获取我的android应用程序的当前时间。时间应该是操作员的时间,而不是用户设置的本地时间以编程方式获取网络运营商';s时间(android),android,datetime,Android,Datetime,我需要获取我的android应用程序的当前时间。时间应该是操作员的时间,而不是用户设置的本地时间 TelephonyManager telephonyManager =((TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE)); String operatorName = telephonyManager.getNetworkOperatorName(); 这是以编程方式获取运算符的名称。但如何获取操作员的当前
TelephonyManager telephonyManager =((TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE));
String operatorName = telephonyManager.getNetworkOperatorName();
这是以编程方式获取运算符的名称。但如何获取操作员的当前时间?如果用户手动更改了时间,则应用程序会将其更改为操作员的当前时间
我也做了一件事:
找不到更好的。如果它已经在stackoverflow上被询问,请原谅并提供链接
编辑:
我忘了提到这是一个离线应用程序,我没有从用户那里获得互联网许可
谢谢。简单的答案是这件事做不到。为了实现您的目标,您的应用程序需要做两件事:
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服务器的实时时间,而不是来自设备的时间。但是,您将无法将时间设置为设备的当前时间。它需要internet连接吗?我忘了提到它是一个离线应用程序,不需要访问互联网许可。是的,这需要互联网连接。如果其中一个不可用,则您将无法获取除本地设备上的时间以外的其他时间。我认为您需要从地址中删除“服务器”位,然后使用timeInfo.getMessage().getTransmitTimeStamp().getTime()
获取实际时间,现在是2019年,但我仍然没有得到答案!:(