Ich schrieb eine App, die eine Sony qx Smartphone ansteckbare Kamera über WLAN auslöst. Allerdings muss ich die Bilder in Echtzeit über ein anderes lokales Netzwerk übertragen. Da die WiFi-Karte für qx-Verbindung verwendet wird, muss ich in der Lage sein, Ethernet über USB zu verwenden, um Bilder vom Telefon zu übertragen. HTTP-Anfragen werden verwendet, um die Kamera auszulösen und die Bilder vom Telefon zu senden.Verwenden Sie mehrere Netzwerkschnittstellen in einer App
Ist es möglich, in einer Android-App auf einem Telefon mit zwei Netzwerkschnittstellen Setup für bestimmte HTTP-Anfragen für die Verwendung einer Netzwerkschnittstelle und für andere eine andere Netzwerkschnittstelle verwenden angeben? Muss dies durch Routing-Tabellen geschehen, nicht durch Java?
Das Telefon, das ich benutze, ist eine verwurzelte Nexus 6p.
Update:
Zeit konnte ich einen Ethernet-Adapter mit dem Gerät (Nexus 6P) zum Laufen bringen. Das Gerät ist über Ethernet mit einem lokalen Netzwerk verbunden. Wenn die Wi-Fi-Schnittstelle ausgeschaltet ist, kann ich alle Geräte im lokalen Netzwerk anpingen, mit denen das Gerät über Ethernet verbunden ist. Ich bin jedoch nicht in der Lage, auf die Webserver (ohne DNS) eines der Geräte in diesem Netzwerk zuzugreifen (von denen ich weiß, dass sie laufen), also HTTP über eine Browser-App. Der Nexus 6p ist über eine Ubiquiti Station über Ethernet mit dem Netzwerk verbunden. Dies scheint ein Routing-Problem zu sein.
Ich kann tether (USB-Schnittstelle) und Wi-Fi in einer App verwenden, so dass mich zu glauben, dass es möglich ist, Ethernet und WLAN zu verwenden.
Update2:
Nach mehr Tests scheint es zu sein, dass es ein Problem mit den Berechtigungen ist. Da beim Ping des Netzwerks das Gerät über Ethernet verbunden ist, ohne zuvor su
im Terminal ausgeführt zu haben, existiert das Netzwerk nicht. Wenn ich jedoch su
dann ping, kann ich das Netzwerk pingen. Daher scheint es, dass meine App vor dem Zugriff auf Ethernet eine Superuser-Berechtigung erhalten muss. Ich habe es Superuser-Zugriff gewährt, aber nichts hat sich geändert. Ich lese, dass einfach su
nicht aus einem der Kommentare in dieser post läuft. Das liegt daran, dass su
nur eine root-Shell hervorbringt, die stirbt. Dies erklärt auch, warum ich nicht über eine Browser-App auf einen der Webserver in diesem Netzwerk zugreifen konnte. Ist es möglich, meiner App Zugriff auf die Ethernet-Schnittstelle zu gewähren, wenn sie HTTP-Aufrufe wie HttpURLConnection
Root-Zugriff geben, wenn das Sinn macht (läuft su
nicht funktioniert)? Es scheint definitiv eine Lösung zu geben, da HttpURLConnection Anrufe über die USB-Tethering-Schnittstelle tätigen kann (Nexus 6P nennt es rndis0
).
Update 3:
ich online here gefunden, dass ich meine app eines System-App machen kann (dachte, das das App eth0 Zugang gewähren könnte). Ich habe gerade meine App auf /system/app
verschoben und dann neu gestartet. Dies scheint der App jedoch keine Privilegien mehr zu geben (wodurch das Problem nicht gelöst wird), oder es ist etwas anderes erforderlich, um das App-System zu erstellen, als es nur nach /system/app
zu kopieren.
Update 4:
So konnte ich Ethernet arbeitet an jeder App, ohne Root-Rechte bekommen! Es scheint, dass es nur über DHCP funktioniert und statische Verbindungen, die ich benutzte, nicht mag. Es funktioniert mit aktiviertem Wi-Fi. Ich kann jedoch keine der Geräte im Wi-Fi-Netzwerk kontaktieren, wenn Ethernet aktiviert ist. Gibt es einen Weg dahin?Hat das mit dem Setzen von zwei Standard-Gateways zu tun?
Also habe ich gerade diese Methode ausprobiert. 'connectivityManager.getAllNetworks()' scheint nur die Wi-Fi-Schnittstelle (Länge = 1) zurückzugeben, wenn ich Ethernet und Wi-Fi eingeschaltet habe, und es gibt nichts zurück, wenn nur Ethernet eingeschaltet ist (Länge = 0). Das Gerät hat eindeutig die Schnittstelle auf, da das Ausführen von 'ifconfig'' eth0' als Schnittstelle zurückgibt, und ich kann Geräte pingen, wie ich oben erwähnt habe. Ich habe sogar versucht, meine App auf eine System-App zu verschieben. Allerdings habe ich das Gefühl, dass ich einen Schritt verpasst habe, als ich das App-System gemacht habe, seitdem ich es auf "/ system/app" verschoben habe, schien es absolut nichts zu tun. – dylan7
Wechseln Sie zu root, ändern Sie den Benutzer und den Gruppenbesitzer des APK in root. Ändern Sie dann die Berechtigung von APK in 644. 'su',' chown root.root/system/app/Ihre.apk', 'chmod 644/system/app/your.apk'. Dann könnte die Berechtigung zum Zugriff auf das eth0-Gerät in Ihrem Code vorhanden sein. – alijandro
Wenn Sie der Meinung sind, dass bei der Erstellung der System-App ein Problem auftritt, überprüfen Sie logcat. Sie erhalten einen Berechtigungsfehler, wenn die App versucht, Shell-Befehle auszuführen. – ekilic