我编写了一个应用程序,通过 wifi 触发索尼 qx 智能手机可连接相机。但是,我需要通过另一个本地网络实时传输手机上的图像。由于 wifi 卡用于 qx 连接,我需要能够通过 USB 使用以太网从手机传输图像。 HTTP 请求将用于触发相机并将图像从手机发送出去。
是否可以在具有两个网络接口设置的手机上的一个 Android 应用程序中指定某些 http 请求使用一个网络接口,而其他请求则使用另一个网络接口?这是否需要通过路由表而不是java来完成?
我使用的手机是 root 后的 Nexus 6p。
Update:
目前,我可以获得与该设备 (Nexus 6P) 配合使用的以太网适配器。该设备通过以太网连接到本地网络。当 Wi-Fi 接口关闭时,我可以 ping 设备通过以太网连接到的本地网络上的所有设备。但是,我无法访问该网络上任何设备(我知道它们正在运行)的 Web 服务器(不使用 DNS),即通过浏览器应用程序访问 Http。 Nexus 6p 通过 Ubiquiti Station 通过以太网连接到网络。这似乎是一个路由问题。
我可以在一个应用程序中连接(USB 接口)并使用 Wi-Fi,这让我相信可以使用以太网和 Wi-Fi。
Update2:
经过多次测试,似乎是权限问题。因为当我 ping 网络时,设备已通过以太网连接到,而无需先运行su
在终端中网络不存在。然而,当我跑步时su
然后ping一下,就可以ping通网络了。因此,我的应用程序似乎需要在访问以太网之前获得超级用户许可。我已授予它超级用户访问权限,但没有任何改变。我读到只是运行su
这篇评论中的一条还不够post https://stackoverflow.com/questions/7295873/how-do-i-request-root-access-in-android。这是因为su
只是产生一个死亡的根壳。这也解释了为什么我无法通过浏览器应用程序访问该网络上的任何 Web 服务器。在进行 HTTP 调用(例如 Give)时,是否可以授予我的应用程序对以太网接口的访问权限HttpURLConnection
root 访问权限,如果有任何意义的话(运行su
不起作用)?似乎肯定有一个解决方案,因为 HttpURLConnection 可以通过 USB 网络共享接口进行调用(Nexus 6P 将其称为rndis0
) fine.
Update 3:
我在网上找到的here http://www.addictivetips.com/mobile/how-to-install-any-app-as-system-app-on-android/,我可以使我的应用程序成为系统应用程序(认为这可能会授予应用程序 eth0 访问权限)。我刚刚将我的应用程序移至/system/app
然后重新启动。然而,这似乎并没有给应用程序更多的特权(因此没有解决问题),或者需要做一些其他的事情来制作应用程序系统,而不仅仅是将其复制到/system/app
.
Update 4:
因此,我无需 root 权限即可在每个应用程序上使用以太网!它似乎只能通过 DHCP 工作,不喜欢我正在使用的静态连接。它可以在启用 Wi-Fi 的情况下工作,但是,当启用以太网时,我无法联系 Wi-Fi 网络上的任何设备。有没有解决的办法?这与设置两个默认网关有关吗?