【发布时间】:2013-08-01 00:27:55
【问题描述】:
我想在 GoogleTV 设备断开连接时收听,然后显示弹出警告。
我以为我已经通过下面的代码实现了这一点,但后来发现我只在设备的以太网电缆断开时才收到断开连接的警告:即 LAN。当路由器的输入以太网电缆断开连接时,我不会收到警报:即 WAN。
我发现在断开 LAN 电缆时,GTV 设备会丢失其 IP 地址,但在断开 WAN 电缆时,GTV 设备仍将有一个 IP 地址 - 这就是为什么我没有收到应用程序提醒的原因失去连接。
那么如何检查 GoogleTV 设备何时不再连接到 WAN?我需要在下面的代码中添加什么来做到这一点?
startListeningToNetwork();
private void startListeningToNetwork() {
if(_networkStateReceiver == null){
//Listen for when the network changes. If app loses internet before webView has loaded, then display error message.
_networkStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(!isConnected()){
showNetworkErrorDialog();
} else {
closeNetworkError();
}
}
};
IntentFilter networkFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
getActivity().registerReceiver(_networkStateReceiver, networkFilter);
}
}
private boolean isConnected() {
ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
Toast.makeText(getActivity(), "isConnected? " + (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected()) , Toast.LENGTH_SHORT).show();
return (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected());
}
【问题讨论】:
-
return InetAddress.getByName("google.com").isReachable(10*1000);:) -
如果我想知道现在是否有互联网连接,isReachable() 很好。但我也想在互联网丢失或重新获得时收到警报。这就是我使用上面提到的 registerReceiver() 方法的原因。使用 isReachable() 方法,我想我可以制作一个计时器来不断 ping “google.com”,但这似乎不是最佳做法。
-
你试过
isConnectedOrConnecting()和isFailOver()吗? -
那仍然只是在特定时间测试连接。当 WAN 连接丢失时,没有什么会像 LAN 连接丢失一样调度事件吗?
-
我在下面发布了一个答案。对此,您可以创建一个 Handler 并递归地运行检查,随时检查连接,这样您就可以创建自己的广播接收器,类似于
CONNECTIVITY_ACTION