连接到 WiFi 时检查互联网连接
Checking for internet connection when connected to a WiFi
我正在做一个 android 项目,在这个项目中我需要一种主动检查互联网连接的方法。
应用程序应该在无法连接到 Internet 时显示红点(尽管它已连接到 WiFi),如果可以连接则显示绿点。
我现在的代码只是在连接到 WiFi 时显示绿色(无论 WiFi 是否可以访问互联网)或红色,而且我想每 10 秒检查一次(天气它可以连接到虽然它已连接到 WiFi)。
我正在使用此代码:
connectivityManager= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
ImageView NetworkStatus = (ImageView)viewGroup.findViewById(R.id.networkAvailability);
NetworkRequest.Builder builder = new NetworkRequest.Builder();
connectivityManager.registerNetworkCallback(
builder.build(),
new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
if(isOnline()){
NetworkStatus.setImageResource(R.drawable.network_circle_on);
}
else
{
NetworkStatus.setImageResource(R.drawable.network_circle_off);
}
}
@Override
public void onLost(Network network) {
NetworkStatus.setImageResource(R.drawable.network_circle_off);
}
}
);
isOnline() 方法是这样的:
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; }
}
而且,我还需要每 10 秒进行一次此检查。我应该怎么做?
我使用 ScheduledExecutorService 解决了我的问题。
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
public void run() {
connectivityManager.registerNetworkCallback(
builder.build(),
new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
if(isOnline()){
NetworkStatus.setImageResource(R.drawable.network_circle_on);
}
else
{
NetworkStatus.setImageResource(R.drawable.network_circle_off);
}
}
@Override
public void onLost(Network network) {
NetworkStatus.setImageResource(R.drawable.network_circle_off);
}
}
);
}
}, 0, 4, TimeUnit.SECONDS);
我正在做一个 android 项目,在这个项目中我需要一种主动检查互联网连接的方法。
应用程序应该在无法连接到 Internet 时显示红点(尽管它已连接到 WiFi),如果可以连接则显示绿点。
我现在的代码只是在连接到 WiFi 时显示绿色(无论 WiFi 是否可以访问互联网)或红色,而且我想每 10 秒检查一次(天气它可以连接到虽然它已连接到 WiFi)。
我正在使用此代码:
connectivityManager= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
ImageView NetworkStatus = (ImageView)viewGroup.findViewById(R.id.networkAvailability);
NetworkRequest.Builder builder = new NetworkRequest.Builder();
connectivityManager.registerNetworkCallback(
builder.build(),
new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
if(isOnline()){
NetworkStatus.setImageResource(R.drawable.network_circle_on);
}
else
{
NetworkStatus.setImageResource(R.drawable.network_circle_off);
}
}
@Override
public void onLost(Network network) {
NetworkStatus.setImageResource(R.drawable.network_circle_off);
}
}
);
isOnline() 方法是这样的:
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; }
}
而且,我还需要每 10 秒进行一次此检查。我应该怎么做?
我使用 ScheduledExecutorService 解决了我的问题。
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
public void run() {
connectivityManager.registerNetworkCallback(
builder.build(),
new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
if(isOnline()){
NetworkStatus.setImageResource(R.drawable.network_circle_on);
}
else
{
NetworkStatus.setImageResource(R.drawable.network_circle_off);
}
}
@Override
public void onLost(Network network) {
NetworkStatus.setImageResource(R.drawable.network_circle_off);
}
}
);
}
}, 0, 4, TimeUnit.SECONDS);