【问题标题】:Connect to LAN and internet at same time?同时连接到局域网和互联网?
【发布时间】:2015-07-30 01:24:15
【问题描述】:

简单地说,我想使用我的 Android 设备连接到 LAN,但不会失去我的互联网功能。

我已经仔细研究了 Google 的网络连接指南,但我发现唯一可能的解决方案是 Wi-Fi Direct。不幸的是,我认为这是不可能的,因为 LAN 不支持 Wi-Fi Direct 协议。

有没有办法连接到没有互联网的 Wi-Fi 接入点,并保持连接到蜂窝网络或之前有互联网的 Wi-Fi 接入点?

如果有帮助,我可以重新配置 LAN

编辑:我见过this question,但看起来没有答案,而且是在 3 年前提出的

【问题讨论】:

  • 你链接到的问题的第一个答案应该做你想做的事。
  • 哪一个/如何?我希望用户在应用程序内连接到 LAN,并且在仍连接到 LAN 的同时,在应用程序之外(例如在 Chrome 中)拥有互联网功能
  • 对不起,没有仔细阅读其他答案。我将在下面添加一个正确的答案。

标签: android android-wifi android-networking


【解决方案1】:

您需要构建一个知道只使用 WiFi 的 HttpClient。

Android 将检查互联网连接,看看它是否可以与它们一起上网,如果不能,则忽略它们。即使对于本地 IP 地址,这也可能很痛苦。

这是我为创建正确配置的 OkHttp 客户端而编写的 Dagger 模块的一部分。

/**
 * Find the WiFi Network object. If the WiFi is off this will return null. You might want to listen to the broadcasts from the WiFi system to retry when the WiFi is turned on.
 */
@Provides
public Network provideNetwork(ConnectivityManager connectivityManager) {
    for (final Network network : connectivityManager.getAllNetworks()) {
        final NetworkInfo networkInfo = connectivityManager.getNetworkInfo(network);
        final int networkType = networkInfo.getType();

        if (networkType == ConnectivityManager.TYPE_WIFI) {
            return network;
        }
    }

    return null;
}


/**
 * Create a HttpClient that will only use the network supplied. Changing this for the built in Apache HttpClient should be easy enough. 
 */
@Provides
public OkHttpClient provideOkHttpClient(final Network network) {
    if (network != null) {
        final OkHttpClient httpClient = new OkHttpClient();
        httpClient.setSocketFactory(network.getSocketFactory());

        Internal.instance.setNetwork(httpClient, new com.squareup.okhttp.internal.Network() {
            @Override
            public InetAddress[] resolveInetAddresses(String host) throws UnknownHostException {
                return network.getAllByName(host);
            }
        });

        return httpClient;
    }

    return null;
}

【讨论】:

  • 我有点困惑...看起来provideNetwork 正在获取预先存在的 Wi-Fi 网络连接。这可能有效,但就目前而言,我与 LAN 建立的初始连接正在中断我的互联网连接(Android 正在尝试通过其他应用程序中的 LAN 访问互联网)。这样能避免这个问题吗?
  • 您使用的是哪个版本的 Android?
  • 这段代码只创建了一个只使用WiFi的HttpClient,它不连接任何网络。
  • 感谢您的快速响应!我正在使用 Android L。您的意思是返回的 OkHttpClient 能够扫描可用网络并专门连接到特定网络(例如 LAN)吗?换句话说,我当前的互联网连接不会受到影响,因为该网络不会中断
  • 这个 HttpClient 只会使用 WiFi 进行数据传输。与 WiFi 连接的网络无关。选择要连接的 WiFi 网络以查看 WiFi 管理器。 developer.android.com/reference/android/net/wifi/…
猜你喜欢
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
相关资源
最近更新 更多