У меня есть развернутое приложение, которое не работает на Android 9. Частью его функции является настройка модуля в сети точки доступа, чтобы этот модуль мог подключаться к домашней сети пользователей.
У меня есть код, который обнаруживает и подключается к правильной сети WIFI, но когда я пытаюсь открыть сокет для устройства, он терпит неудачу - только на Android 9 и только если включены мобильные данные. Если я вручную отключу мобильные данные на устройстве, все будет работать нормально.
Socket open() {
Socket sock = new Socket(Proxy.NO_PROXY);
try {
sock.bind(new InetSocketAddress(localIpAddress(), 50000));
} catch (IOException e) {
activity.logContent("Warning: Failed to bind socket : " + e.toString());
}
try {
sock.connect(new InetSocketAddress("192.168.17.1", 5555), (int)5000);
} catch (IOException e) {
// This catch fires when Mobile Data is on.
activity.logContent("Connected to " + activity.mWifiManager.getConnectionInfo().getSSID());
activity.logContent("Couldn't open socket : " + e.toString());
}
return sock;
}
Я пробовал это с вызовом Proxy.NO_PROXY
и без него, а также с вызовом bind()
и без него. Если вызов привязки отсутствует, ошибка означает, что сокет пытается подключиться через сотовую сеть. (Примечание: activity.logContent()
— это экранный журнал, поэтому проще увидеть, что происходит, когда не подключен к отладчику).
Любые идеи, что происходит не так?