gpt4 book ai didi

java - 配置应用程序以使用设置中的代理

转载 作者:可可西里 更新时间:2023-11-01 16:38:17 26 4
gpt4 key购买 nike

在我的 android 应用程序中,我需要连接到互联网以检查时间。此代码段在移动网络和未启用代理的 WiFi 网络中运行良好:

public class MyTimeGetterTask {
@Override
protected Long doInBackground(Void... params) {
WebTimeSntpClient client = new WebTimeSntpClient();
if (client.requestTime("time-d.nist.gov", 3000)) {
long now = client.getNtpTime() + SystemClock.elapsedRealtime()
- client.getNtpTimeReference();
return now;
}
else {
return null;
}
}
}

WebTimeSntpClient 的核心元素如下:

public class WebTimeSntpClient {
public boolean requestTime(String host, int timeout) {
DatagramSocket socket = null;
try {
socket = new DatagramSocket();
socket.setSoTimeout(timeout);
InetAddress address = InetAddress.getByName(host);
byte[] buffer = new byte[NTP_PACKET_SIZE];
DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, NTP_PORT);

...

socket.send(request);

DatagramPacket response = new DatagramPacket(buffer, buffer.length);
socket.receive(response);
...

} catch (IOException ex) {
return false;
} finally {
if (socket != null) {
socket.close();
}
}

return true;
}
}

但是,当我在办公室时,WiFi 需要我配置代理(我在设置中通过长按网络然后单击“修改网络”来完成 - 从 Android API 级别 17 开始)连接失败。

现在我已经在互联网上查找了很多关于代理的非常好的帖子,尤其是在 SO 上,但是他们似乎绝对没有回答这个(对我来说)非常简单的问题:

如何强制我的应用程序使用已在设置中配置的代理?

相反,他们专注于更高级的问题,例如:

再次强调:我想强调这不是我的 Intent ,我只是想让我的应用程序连接到互联网,无论如何。是否有一些 System.useWifiProxyIfAvailable(true) 方法?我确定我一定是在这里某处遗漏了一个帖子...

最佳答案

您正在尝试使用 SNTP通过只允许 HTTP/HTTPS 的代理。您的替代方案是使用一些提供当前时间的 HTTP 服务,这对于大多数用户级应用程序来说已经足够了。

http://www.timeapi.org/utc/now 尝试一下,但是如果您使用此服务发布应用程序,则应查看条款和条件

关于java - 配置应用程序以使用设置中的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18106752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com