2

我正在使用 Android marshmallow api,它使用户能够在 LTE 和 WiFi 上工作。(即)即使通过设置网络类型打开 wifi,我们也可以强制我们的应用程序使用 hipri 网络使用 LTE。

我检查了这个链接:当 WIFI 开启时通过移动数据发送请求。(Android L)

    builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
    builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);

    mNetworkCallback =
            new NetworkCallback() {
                @Override
                public void onAvailable(Network network) {
                    super.onAvailable(network);
                    Log.d(TAG, "activate(): onAvailable(): " + network);
                    myConnManager.bindProcessToNetwork(network);
                    myCallback.networkStateChanged(State.CONNECTED);
                }

                @Override
                public void onLosing(Network network, int maxMsToLive) {
                    super.onLosing(network, maxMsToLive);
                    Log.d(TAG, "activate(): onLosing(): ms to live: " + maxMsToLive);
                    myCallback.networkStateChanged(State.DISCONNECTING);
                }

                @Override
                public void onLost(Network network) {
                    super.onLost(network);
                    Log.d(TAG, "activate(): onLost(): " + network);
                    myConnManager.bindProcessToNetwork(null);
                    myCallback.networkStateChanged(State.DISCONNECTED);
                }
            };

现在我正在努力获取连接的 WiFi 网络和 LTE 网络的 IP 地址。我不确定如何并行检索两个连接网络的 IP 地址。

这里的任何帮助都是不言而喻的。

4

1 回答 1

2

以下是您可以从对象中InetAddress取出的方法Network network

ConnectivityManager manager = getSystemService(ConnectivityManager.class);
LinkProperties prop = manager.getLinkProperties(network);
InetAddress addr = prop.getLinkAddresses().get(0).getAddress();

在您的情况下,您可以在任何NetworkCallback方法中使用它,您将获得移动数据连接的 IP 地址(尽管我怀疑它仅在 中有意义onAvailable())。在 API 23 中,您可以使用getActiveNetwork()获取Network与“当前活动的默认数据网络”对应的对象,该对象应该是 Wi-Fi(但是,获取 IP 地址的传统方式也应该指向这个)。

于 2015-12-11T08:08:04.037 回答