希望使用此代码,您可以检查网络连接
public class InternetCheckerTask extends AsyncTask<Void, Void, Void> {
private OnInternetCheckListener listener;
private int authStatus;
private boolean running;
public InternetCheckerTask(OnInternetCheckListener listener) {
this.listener = listener;
}
@Override
protected Void doInBackground(Void... voids) {
running = true;
if(isInternetReallyAvailable()) {
authStatus = AuthConstants.CONNECTED;
} else {
authStatus = AuthConstants.NOT_CONNECTED;
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
if(listener != null) {
listener.onResponse(authStatus);
}
running = false;
}
// should not be called from ui thread, can be called only from background service
private boolean isInternetReallyAvailable() {
ConnectivityManager cm = (ConnectivityManager) App.getInstance().getBaseContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if(activeNetwork == null || !activeNetwork.isAvailable() || !activeNetwork.isConnected()) {
return false;
} else {
// TCP/HTTP/DNS (depending on the port, 53=DNS, 80=HTTP, etc.)
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;
}
}
}
public boolean isRunning() {
return running;
}
public interface OnInternetCheckListener {
void onResponse(int status);
}
}
创建一个类并定义以下常量值
public class AuthConstants {
public static final int CONNECTED = 1;
public static final int NOT_CONNECTED = 2;
}
这就是你应该如何在任何你需要的地方使用这个功能
new InternetCheckerTask(new InternetCheckerTask.OnInternetCheckListener() {
@Override
public void onResponse(int status) {
switch (status) {
case AuthConstants.CONNECTED:
// connection is available
break;
default:
// no connection
break;
}
}
}).execute();