我寫了一個應用程序,觸發一個索尼qx智能手機可連接相機通過WiFi。但是,我需要通過另一個本地網絡實時傳送圖像。由於無線網卡被用於qx連接,我需要能夠通過USB使用以太網傳輸圖像。 Http請求將用於觸發相機並將圖像從手機中發送出去。在一個應用程序中使用多個網絡接口
是否有可能在兩個網絡接口設置的手機上的一個Android應用程序中指定某些http請求使用一個網絡接口併爲其他網絡接口使用另一個網絡接口?這是否需要通過路由表完成,而不是java?
我使用的手機是一個根深蒂固的nexus 6p。
更新:
目前,我能得到一個以太網適配器與設備(的Nexus 6P)工作。設備通過以太網連接到本地網絡。當Wi-Fi接口關閉時,我可以ping設備通過以太網連接到的本地網絡上的所有設備。但是,我無法通過該網絡上的任何設備(我知道它們正在運行)訪問網絡服務器(不使用DNS),即通過瀏覽器應用程序訪問Http。 nexus 6p通過以太網通過Ubiquiti Station連接到網絡。這似乎是一個路由問題。
我可以連接(usb接口)並在一個應用程序中使用Wi-Fi,這使我相信可以使用以太網和Wi-Fi。
UPDATE2:
更多的測試後,它似乎是,這是一個權限問題。因爲當我ping網絡時,設備通過以太網連接,而不是在終端中運行su
,網絡不存在。但是,當我運行su
然後ping時,我可以ping網絡。因此,看起來我的應用需要在訪問以太網之前獲得超級用戶權限。我已授予超級用戶訪問權限,但沒有任何更改。我讀到,僅僅運行su
是不夠的,從這個post的意見之一。這是因爲su
只是產生了死亡的root shell。這也解釋了爲什麼我無法通過瀏覽器應用程序訪問此網絡上的任何Web服務器。在進行HTTP調用時可以授予我的應用程序訪問以太網接口的權限,如給予HttpURLConnection
根訪問權限(如果這樣做有意義)(運行su
不起作用)?似乎肯定有解決方案,因爲HttpURLConnection可以通過USB共享接口撥打電話(Nexus 6P稱其爲rndis0
)很好。
更新3:
我在網上找到here,我可以讓我的應用程序的系統應用程序(想這可能授予應用程序的eth0訪問)。我只是將我的應用程序移動到/system/app
,然後重新啓動。然而,這似乎沒有給予應用程序更多的權限(因此不能解決問題),或者還有其他需要製作應用程序系統的東西,而不僅僅是將其複製到/system/app
。
更新4:
所以我能得到以太網上的每一個應用程序的工作沒有root權限!它似乎只能通過DHCP工作,並不喜歡我使用的靜態連接。它支持Wi-Fi,但是,啓用以太網後,我無法聯繫Wi-Fi網絡上的任何設備。有沒有解決的辦法?它是否與設置兩個默認網關有關?
所以我只是試過這種方法。當Ethernet和Wi-Fi開啓時,connectivityManager.getAllNetworks()似乎只返回Wi-Fi接口(長度= 1),而當以太網打開時(長度= 0),它不會返回任何內容。由於運行'ifconfig'返回'eth0'作爲接口,因此該設備顯然具有接口,並且可以按照上面所述ping設備。我甚至嘗試將我的應用移至系統應用。然而,我覺得我在製作應用系統時錯過了一個步驟,因爲將它移動到'/ system/app'似乎絕對無能爲力。 – dylan7
切換到root,將APK的用戶和組所有者修改爲root。然後將APK的權限更改爲644.'su','chown root.root/system/app/your.apk','chmod 644/system/app/your.apk'。然後可能有權訪問代碼中的eth0設備。 – alijandro
如果您認爲製作系統應用時出現問題,請檢查logcat。當應用程序嘗試運行shell命令時,您將收到權限錯誤。 – ekilic