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

Nag*_*ram 11 datetime android

我需要获取我的Android应用程序的当前时间.时间应该是操作员的时间,而不是用户设置的当地时间.

TelephonyManager telephonyManager =((TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE));
String operatorName = telephonyManager.getNetworkOperatorName();
Run Code Online (Sandbox Code Playgroud)

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

我也做了谷歌搜索:

无法找到更好的一个.如果已经在stackoverflow上询问,请原谅并提供链接.

编辑:

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

谢谢.

Ale*_*s G 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);
Run Code Online (Sandbox Code Playgroud)

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