android – 在应用程序中使用多个网络接口

android – 在应用程序中使用多个网络接口,第1张

概述我写了一个通过WiFi触发索尼qx智能手机相机的应用程序.然而,我需要将图像从手机上传输到另一个本地网络上.由于wifi卡正在用于qx连接,因此我需要能够使用以太网将USB传输到手机上. Http请求将用于触发相机并将图像从手机中发送出去. 是否可能在一个Android应用程序的电话上有两个网络接口设置来指定某些http请求使用一个网络接口和其他人使用另一个网络接口?这是否需要通过路由表完成,而不 我写了一个通过WiFi触发索尼qx智能手机相机的应用程序.然而,我需要将图像从手机上传输到另一个本地网络上.由于wifi卡正在用于qx连接,因此我需要能够使用以太网将USB传输到手机上. http请求将用于触发相机并将图像从手机中发送出去.

是否可能在一个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网络上的任何设备.有没有解决的办法?它是否与设置两个默认网关有关?

解决方法 由于您是在Nexus 6P中进行编程,您可以尝试使用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);        }    }}
总结

以上是内存溢出为你收集整理的android – 在应用程序中使用多个网络接口全部内容,希望文章能够帮你解决android – 在应用程序中使用多个网络接口所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1133772.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存