Я разрабатываю мобильное приложение (iOS и Android) для управления устройством через Wi-Fi. Устройство создает беспроводную сеть (SoftAP), но не обеспечивает доступ к Интернету.
В iOS я могу подключиться к устройству и сделать запросы на его IP-адрес (192.168.70.1), но все остальные запросы возвращаются в мобильную сеть. Это позволяет телефону поддерживать подключение к Интернету при подключении к устройству через Wi-Fi.
На Android, если я подключаюсь к беспроводной сети устройства, интернет-запросы не возвращаются к мобильному соединению, они просто терпят неудачу.
В моем приложении для Android я могу использовать ConnectivityManager.requestRouteToHost
, чтобы заставить приложения из моего приложения использовать мобильную сеть. Однако запросы других приложений по-прежнему используют сеть Wi-Fi устройства и не работают.
Я также попытался использовать ConnectivityManager
для изменения сетевого предпочтения с помощью:
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE)
Это заставляет телефон использовать мобильную сеть для всех запросов от всех приложений. Wi-Fi отключен. Похоже, что в предыдущих версиях Android Wi-Fi все еще можно было использовать, даже если это не "предпочтительная" сеть, но это, похоже, не работает в KitKat. Возможно, это связано с изменением в Android 4.2: https://code.google.com/p/android/issues/detail?id=73509 "ConnectivityManager, так как 4.2 сбрасывает сети, которые не являются NetworkPreference"
Есть ли решение, позволяющее Android-приложению использовать Wi-Fi для определенного IP-адреса и мобильной сети для всего остального? Может быть, это можно сделать через NDK?