在我的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,但絕對沒有人似乎要回答這個(我)很簡單的問題:
如何強制我的應用程序使用已經在設置中配置的代理嗎?
相反,他們專注於更先進的問題,如:
- How to GET a proxy from the system
- How to SET ip information to the system yourself
- 以及更多有關如何從Play商店使現有的應用程序使用代理
再次強調:我想強調這是而不是我的意圖是,我只是希望我的應用連接到互聯網,無論如何。有一些System.useWifiProxyIfAvailable(true)
方法嗎?我確信我一定在這裏錯過了一個帖子...
您的代理可能只允許HTTP/HTTPS連接 –
嗯,聽起來很正確,所以你說我沒有通過http連接?我將如何解決這個問題? Thx – avalancha
WebTimeSntpClient:Sntp!= HTTP –