是否可能在一个Android应用程序的电话上有两个网络接口设置来指定某些http请求使用一个网络接口和其他人使用另一个网络接口?这是否需要通过路由表完成,而不是java?
我正在使用的手机是一个rooted nexus 6p.
更新:
目前,我能够使用以太网适配器(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的评论之一.这是因为su只是产生一个根shell死亡.这也解释了为什么我无法通过浏览器应用访问此网络上的任何Web服务器.在进行HTTP调用(如给予HttpURLConnection root访问)时,是否可以授予我的应用程序访问以太网接口的权限,如果这样做有意义(运行su不起作用)?似乎肯定有一个解决方案,因为HttpURLConnection可以通过USB tethering接口(Nexus 6P称它为rndis0)通话.
更新3:
我发现在线here,我可以让我的应用程序是一个系统应用程序(认为这可能授予应用程序eth0访问权限).我刚刚将我的应用程序移动到/ system / app,然后重新启动.然而,这似乎没有给应用程序更多的权限(因此不能解决问题),或者还有一些其他的需要,使应用程序系统,而不是将其复制到/ system / app.
更新4:
所以我可以让以太网工作在每个应用程序没有root权限!似乎它只适用于DHCP,不喜欢静态连接,我正在使用它.它可以启用Wi-Fi,但是,当启用以太网时,我无法联系Wi-Fi网络上的任何设备.有没有解决的办法?它是否与设置两个默认网关有关?
解决方法
既然我不能像你这样建立类似的环境,我不知道它是否有效.这只是一个建议的解决方案,完全没有测试和验证.
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); } } }