Ho scritto un'app che attiva una fotocamera Sony qx per smartphone collegabile tramite Wi-Fi. Tuttavia ho bisogno di trasferire le immagini dal telefono su un'altra rete locale in tempo reale. Poiché la scheda wifi viene utilizzata per la connessione qx, devo poter utilizzare Ethernet su USB per trasferire le immagini dal telefono. Le richieste Http verranno utilizzate per attivare la fotocamera e inviare le immagini dal telefono.Utilizzare più interfacce di rete in un'app
E 'possibile in una app Android su un telefono con due impostazioni di interfaccia di rete specificare per alcune richieste http di utilizzare un'interfaccia di rete e per gli altri utilizzare un'altra interfaccia di rete? Questo deve essere fatto attraverso le tabelle di routing, non java?
Il telefono che sto utilizzando è un nexus 6p radicato.
Aggiornamento:
Attualmente, sono stato in grado di ottenere un adattatore Ethernet a lavorare con il dispositivo (Nexus 6P). Il dispositivo è connesso a una rete locale tramite Ethernet. Quando l'interfaccia Wi-Fi è spenta, posso eseguire il ping di tutti i dispositivi sulla rete locale su cui il dispositivo è connesso via Ethernet. Tuttavia, non sono in grado di accedere ai server Web (non utilizzando DNS) di nessuno dei dispositivi su tale rete (che so che sono in esecuzione), ad esempio Http tramite un'app browser. Il nexus 6p è connesso alla rete tramite Ethernet tramite una stazione Ubiquiti. Questo sembra essere un problema di routing.
Posso legare (interfaccia usb) e utilizzare il Wi-Fi in un'unica app, quindi mi viene da pensare che sia possibile utilizzare Ethernet e Wi-Fi.
Update2:
Dopo ulteriori test, sembra essere che si tratta di un problema di autorizzazioni. Da quando eseguo il ping della rete, il dispositivo è connesso a Ethernet senza aver prima eseguito su
nel terminale, la rete non esiste. Tuttavia, quando corro su
quindi ping, posso eseguire il ping della rete. Quindi sembra che la mia app abbia bisogno dell'autorizzazione di superutente prima di accedere a Ethernet. Gli ho concesso l'accesso superutente, ma non è cambiato nulla. Ho letto che semplicemente eseguire su
non è sufficiente da uno dei commenti in questo post. Questo perché su
genera appena una shell di root che muore. Questo spiega anche perché non ho potuto accedere a nessuno dei server web su questa rete tramite un'app browser. È possibile concedere alla mia app l'accesso all'interfaccia Ethernet quando si effettuano chiamate HTTP come l'accesso root HttpURLConnection
, se questo ha senso (l'esecuzione di su
non funziona)? Sembra esserci una soluzione definitiva poiché HttpURLConnection può effettuare chiamate tramite l'interfaccia di tethering USB (Nexus 6P la chiama rndis0
).
Update 3:
ho trovato online here, che posso fare la mia app un'applicazione di sistema (pensato che questo potrebbe concedere l'applicazione di accesso eth0). Ho appena spostato la mia app su /system/app
e quindi riavviato. Tuttavia, questo non sembra dare più privilegi all'app (quindi non risolvere il problema), o c'è qualcos'altro richiesto per rendere il sistema di app appena copiato su /system/app
.
Update 4:
così mi è stato in grado di ottenere Ethernet a lavorare su ogni app senza i permessi di root! Sembrava che funzionasse solo su DHCP e non amasse le connessioni statiche, che stavo usando. Funziona con Wi-Fi abilitato, tuttavia, non posso contattare nessuno dei dispositivi sulla rete Wi-Fi quando Ethernet è abilitato. C'è un modo per aggirare questo?Ha a che fare con l'impostazione di due gateway predefiniti?
Quindi ho appena provato questo metodo. 'connectivityManager.getAllNetworks()' sembra restituire solo l'interfaccia Wi-Fi (lunghezza = 1), quando ho Ethernet e Wi-Fi attivo, e non restituisce nulla quando è attiva solo Ethernet (lunghezza = 0). Il dispositivo ha chiaramente l'interfaccia in quanto l'esecuzione di 'ifconfig' restituisce' eth0' come interfaccia, e posso eseguire il ping dei dispositivi come ho detto sopra. Ho persino provato a spostare la mia app su un'app di sistema. Tuttavia, mi sembra di aver perso un passaggio durante la creazione del sistema di app dal momento che spostarlo in '/ system/app' sembrava non fare assolutamente nulla. – dylan7
Passare a root, modificare l'utente dell'APK e il proprietario del gruppo su root. quindi cambia il permesso di APK a 644. 'su',' chown root.root/system/app/your.apk', 'chmod 644/system/app/your.apk'. Quindi potrebbe avere il permesso di accedere al dispositivo eth0 nel tuo codice. – alijandro
Se pensi che ci sia un problema nel fare app di sistema, controlla logcat. Otterrai un errore di autorizzazione quando l'app tenta di eseguire comandi di shell. – ekilic