【问题标题】:Auto reconnect socket from wifi to 4G自动将套接字从 wifi 重新连接到 4G
【发布时间】:2015-02-01 13:51:16
【问题描述】:

我有一个使用 Wifi 或 4G 信号连接到 TCP 服务器的套接字,该信号每 5 分钟从服务器接收一次 PING。但是,如果我关闭设备上的 Wifi,我希望套接字能够检测到这一点并使用 4g 信号重新连接。 我想知道如果我超出 wifi 的范围或关闭 wifi,是否有办法自动将套接字重新连接到 4G?

也有办法走另一条路(如果 wifi 可用,从 4g 到 wifi?

【问题讨论】:

    标签: android sockets wifi


    【解决方案1】:

    注册一个 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) 检索它。

    常量值:“已连接”

    【讨论】:

    • 如果 Wifi 已打开但设备未连接到它,这会起作用吗?就像我走出 wifi 的范围...
    • 根据documentation,应该是这样的。
    • @user3322270 你试过了吗?
    • 这是在服务中还是在活动中?
    • 这取决于你的实现。你怎么样?您应该在可以控制套接字的地方添加它。无论哪种方式,它都应该工作。
    猜你喜欢
    • 2017-10-16
    • 2016-01-09
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 2019-03-05
    • 2017-02-15
    相关资源
    最近更新 更多