Я написал приложение, которое запускает подключаемую камеру Sony qx для подключения смартфона через Wi-Fi. Однако мне нужно передавать изображения с телефона через другую локальную сеть в режиме реального времени. Поскольку Wi-Fi-карта используется для подключения qx, мне нужно иметь возможность использовать ethernet через USB для передачи изображений с телефона. Запросы Http будут использоваться для запуска камеры и отправки изображений с телефона.
Возможно ли в одном приложении Android на телефоне с настройкой двух сетевых интерфейсов указать определенные HTTP-запросы для использования одного сетевого интерфейса, а другим - использовать другой сетевой интерфейс? Нужно ли это делать через таблицы маршрутизации, а не java?
Телефон, который я использую, - это корневая связь 6p.
Update:
В настоящее время я смог получить адаптер Ethernet, работающий с устройством (Nexus 6P). Устройство подключено к локальной сети через Ethernet. Когда Wi-Fi интерфейс выключен, я могу выполнить ping все устройства в локальной сети, к которой подключено устройство через Ethernet. Тем не менее, я не могу получить доступ к веб-серверам (не используя DNS) любого из устройств в этой сети (которые, как я знаю, они работают), т.е. Http, через браузер. Nexus 6p подключается к сети через Ethernet через Ubiquiti Station. Это, по-видимому, проблема маршрутизации.
Я могу привязать (интерфейс usb) и использовать Wi-Fi в одном приложении, поэтому мне кажется, что можно использовать Ethernet и Wi-Fi.
Update2
После большего тестирования, похоже, что это проблема с разрешениями. Поскольку, когда я пингую сеть, устройство подключено к сети Ethernet без первого запуска su
в терминале, сеть не существует. Однако, когда я запускаю su
, тогда пинг, я могу выполнить ping сеть. Таким образом, кажется, что моему приложению нужно получить разрешение суперпользователя до доступа к Ethernet. Я предоставил ему доступ к суперпользователю, но ничего не изменилось. Я читал, что просто запустить su
недостаточно из одного из комментариев в этом сообщении . Это потому, что su
просто порождает корневую оболочку, которая умирает. Это также объясняет, почему я не мог получить доступ к любому веб-серверу в этой сети через приложение-браузер. Возможно ли предоставить доступ моему приложению к интерфейсу Ethernet при выполнении HTTP-вызовов, например, предоставить HttpURLConnection
root-доступ, если это имеет смысл (работает su
не работает)? Кажется, что определенно существует решение, так как HttpURLConnection может совершать вызовы через USB-модемный интерфейс (Nexus 6P называет его rndis0
).
Обновление 3:
Я нашел онлайн здесь, что я могу сделать свое приложение системным приложением (подумал, что это может предоставить доступ к нему eth0). Я просто перенес свое приложение на /system/app
, а затем перезагрузился. Однако, похоже, это больше не придает приложениям больше привилегий (таким образом, не решая проблему), или есть что-то еще, требуемое для создания системы приложений, а не просто копирование ее на /system/app
.
Обновление 4:
Итак, я смог получить Ethernet, работающий над каждым приложением без прав root! Казалось, что он работает только через DHCP и не любит статические соединения, которые я использовал. Он работает с включенным Wi-Fi, однако я не могу связаться ни с одним из устройств в сети Wi-Fi, когда включен Ethernet. Есть ли способ обойти это? Это связано с установкой двух шлюзов по умолчанию?