Получить IP-адрес LTE и WiFi при одновременном подключении в Android M

Я работаю в Android зефира API, который позволяет пользователю работать как на LTE, так и на Wi-Fi (то есть) мы можем заставить наше приложение использовать LTE, используя сеть hipri, даже когда Wi-Fi включен, установив тип сети.

Я проверил эту ссылку: Отправить запрос через мобильные данные, когда 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);
                }
            };

Сейчас я работаю над получением IP-адреса как подключенной сети Wi-Fi, так и сети LTE. Я не уверен, как получить IP-адрес обеих подключенных сетей параллельно.

Любая помощь здесь будет заметна.

1 ответ

Вот как вы можете получить 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-адреса также должны указывать на этот).

Другие вопросы по тегам