我正在研究一个android项目,在其中我需要一种主动检查Internet连接的方法。
该应用程序应该在无法连接到互联网(尽管已连接到WiFi)时显示红色点,如果可以连接则显示绿色点。
我现在拥有的代码在连接到WiFi时仅显示绿色(天气是否可以访问Internet),或者红色,我还想每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秒进行一次此检查。我该怎么办?
答案 0 :(得分:0)
我使用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);