【发布时间】:2015-02-01 13:51:16
【问题描述】:
我有一个使用 Wifi 或 4G 信号连接到 TCP 服务器的套接字,该信号每 5 分钟从服务器接收一次 PING。但是,如果我关闭设备上的 Wifi,我希望套接字能够检测到这一点并使用 4g 信号重新连接。 我想知道如果我超出 wifi 的范围或关闭 wifi,是否有办法自动将套接字重新连接到 4G?
也有办法走另一条路(如果 wifi 可用,从 4g 到 wifi?
【问题讨论】:
我有一个使用 Wifi 或 4G 信号连接到 TCP 服务器的套接字,该信号每 5 分钟从服务器接收一次 PING。但是,如果我关闭设备上的 Wifi,我希望套接字能够检测到这一点并使用 4g 信号重新连接。 我想知道如果我超出 wifi 的范围或关闭 wifi,是否有办法自动将套接字重新连接到 4G?
也有办法走另一条路(如果 wifi 可用,从 4g 到 wifi?
【问题讨论】:
注册一个 inclass BroadCastReceiver 以开启或关闭 WIFI 收听:
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.wifi.supplicant.CONNECTION_CHANGE");
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
boolean isConnected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);
if (isConnected ) {
//Reconnect using Wifi.
} else {
//Reconnect using 4G.
}
}
}
registerReceiver(receiver, filter);
别忘了注销接收者:
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
关于 EXTRA_SUPPLICANT_CONNECTED 额外,文档指出:
布尔值的查找键,指示是否连接到 请求者守护进程已经获得或丢失。 true 表示连接 现在存在。使用 getBooleanExtra(String, boolean) 检索它。
常量值:“已连接”
【讨论】: