我编写了一款应用程序,通过wifi触发索尼qx智能手机可附摄像头。然而,我需要通过另一个本地网络实时传输图像通过电话。由于wifi卡是用于qx连接,我需要能够使用以太网通过usb传输图像通过电话。Http请求将用于触发摄像机并将图像发送到电话上。
在带有两个网络接口的手机上的一个android应用程序中,是否可以指定某些http请求使用一个网络接口,而其他人则使用另一个网络接口?这需要通过路由表而不是java来完成吗?
我使用的手机是一个根深蒂固的连接6p。
更新:
目前,我能够使用该设备(Nexus6P)获得一个以太网适配器。该设备通过以太网连接到本地网络。当Wi接口关闭时,我可以通过以太网将设备连接到本地网络上的所有设备。但是,我无法访问该网络上的任何设备(我知道它们正在运行)的web服务器(不使用DNS),即通过浏览器应用程序访问Http。nexus 6p通过以太网通过Ubiquiti站连接到网络。这似乎是一个路由问题。
我可以绑定(usb接口)并在一个应用程序中使用Wi,这让我相信可以使用以太网和Wi。
Update2
经过更多的测试后,它似乎是一个权限问题。由于当我平网络时,设备是通过以太网连接到的,而不首先在终端上运行su,所以网络就不存在了。然而,当我运行su然后ping时,我可以平移网络。因此,在访问以太网之前,我的应用程序似乎需要获得超级用户的许可。我已经授予它超级用户访问权,但是没有什么改变。我从这个su中的一个注释中看到,仅仅运行帖子是不够的。这是因为su只是产生了一个死掉的根外壳。这也解释了为什么我不能通过浏览器应用程序访问这个网络上的任何一个web服务器。在进行HTTP调用(如给予HttpURLConnection根访问权)时,是否可以授予应用程序对以太网接口的访问权限(如果这有任何意义的话)(运行su不起作用)?似乎肯定有一个解决方案,因为HttpURLConnection可以通过(Nexus6P称之为rndis0)进行调用。
更新3
我在网上找到了这里,我可以让我的应用程序成为一个系统应用程序(我认为这可能会授予应用程序eth0访问权限)。我刚把我的应用程序移到/system/app,然后重新启动。然而,这似乎并没有赋予应用程序更多的特权(因此不能解决问题),或者,除了将应用系统复制到/system/app之外,还需要做一些其他的事情。
更新4
因此,我能够让以太网在没有根权限的情况下在每个应用程序上工作!它似乎只在DHCP上工作,不喜欢静态连接,我正在使用它。它可以在启用with的情况下工作,但是,当启用以太网时,我无法与with网络上的任何设备联系。有办法绕道吗?这与设置两个默认网关有关吗?
发布于 2016-06-24 03:31:11
由于您是在Nexus6P中编程,所以可以尝试使用ConnectivityManager中添加的新API来选择以太网作为您进程的首选网络连接。
因为我不能像你这样建立类似的环境,所以我不确定它是否有效。这只是一个建议的解决方案,完全没有经过测试和验证。
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
Network etherNetwork = null;
for (Network network : connectivityManager.getAllNetworks()) {
NetworkInfo networkInfo = connectivityManager.getNetworkInfo(network);
if (networkInfo.getType() == ConnectivityManager.TYPE_ETHERNET) {
etherNetwork = network;
}
}
Network boundNetwork = connectivityManager.getBoundNetworkForProcess();
if (boundNetwork != null) {
NetworkInfo boundNetworkInfo = connectivityManager.getNetworkInfo(boundNetwork);
if (boundNetworkInfo.getType() != ConnectivityManager.TYPE_ETHERNET) {
if (etherNetwork != null) {
connectivityManager.bindProcessToNetwork(etherNetwork);
}
}
}发布于 2016-06-24 22:16:22
再解释一下这件事是怎么解决的。
利用@alijandro的回答,我能够在一个应用程序中在以太网和Wi之间来回切换。由于某些原因,以太网需要网络网关提供DHCP地址,而不是静态地址。然后,由于@alijandro中使用的bindProcessToNetwork是每个进程,我决定将与QX摄像机的通信拆分为一个运行在单独进程中的Service。主应用程序(另一个进程)将通过以太网将图像发送到本地网络。我成功地通过以太网HTTP与本地网络上的设备联系,同时通过Wi触发QX。目前,我使用Messenger进行通信,使用IPC通知QX触发Service调用什么方法。
发布于 2016-06-24 00:54:06
大多数android电视机箱都可以同时使用wifi和以太网。在我的设备中,我可以通过这个路径启用以太网--设置-> More .>以太网--但是您的设备不会有像我所理解的那样的菜单。所以你应该做一个应用程序来做这个。此应用程序需要访问某些特定于系统的资源,因此您的设备需要扎根,或者应用程序需要使用系统签名进行签名。此外,本主题还可以帮助您链接
https://stackoverflow.com/questions/37715525
复制相似问题