我想在我的android应用程序中检查连接状态。我调用onResume中的next方法
public boolean isThereInternetConnection() {
boolean isConnected = false;
ConnectivityManager connectivityManager =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = (connectivityManager != null) ? connectivityManager.getActiveNetworkInfo() : null;
if (networkInfo != null) {
isConnected = networkInfo.isConnected();
}
return isConnected;
}在正常模式下,它工作得很好。但是当我的设备处于省电模式,并且我在后台打开我的活动时,isThereInternetConnection()方法有时会返回false (互联网连接正常)。为此,我检查了networkInfo.getDetailedState(),在省电模式下,即使我有良好的互联网连接,它也会返回DetailedState.BLOCKED。那么,如何解决这个问题,如何在省电模式下检查网络连接,并获得真实的真假值--是否连接到互联网?
发布于 2018-08-16 21:43:28
检查互联网的最好方法实际上是连接到互联网。有时可以连接互联网,但不能访问网络。
public boolean isOnline() {
try {
int timeoutMs = 1500;
Socket sock = new Socket();
SocketAddress sockaddr = new InetSocketAddress("8.8.8.8", 53);
sock.connect(sockaddr, timeoutMs);
sock.close();
return true;
} catch (IOException e) { return false; }
}以上代码不会在主线程上运行,需要internet连接权限。
下面的代码有点慢,但可以在主线程上运行。需要internet连接权限:
public boolean isOnline() {
Runtime runtime = Runtime.getRuntime();
try {
Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
int exitValue = ipProcess.waitFor();
return (exitValue == 0);
}
catch (IOException e) { e.printStackTrace(); }
catch (InterruptedException e) { e.printStackTrace(); }
return false;
}发布于 2018-08-16 21:56:56
您可以使用此方法:
public void checkInternetAndContinue() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
int timeoutMs = 1500;
Socket sock = new Socket();
SocketAddress sockaddr = new InetSocketAddress("8.8.8.8", 53);
sock.connect(sockaddr, timeoutMs);
sock.close();
runOnUiThread(new Runnable() {
@Override
public void run() {
startWork(true);
}
});
} catch (IOException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
startWork(false);
}
});
}
}
});
thread.start();
}如果有互联网,还可以继续工作
private void startWork(boolean b) {
if(b){
// do whatever you want when the internet is available
} else {
// No Internet.
}
}希望它能帮上忙!
https://stackoverflow.com/questions/51878434
复制相似问题