Tôi đã viết một ứng dụng đang kích hoạt điện thoại thông minh gắn kết qx của Sony qua wifi. Tuy nhiên tôi cần phải chuyển hình ảnh ra khỏi điện thoại qua mạng cục bộ khác trong thời gian thực. Kể từ khi thẻ wifi đang được sử dụng cho kết nối qx tôi cần để có thể sử dụng ethernet qua usb để chuyển hình ảnh ra khỏi điện thoại. Các yêu cầu Http sẽ được sử dụng để kích hoạt camera và gửi ảnh ra khỏi điện thoại.Sử dụng nhiều giao diện mạng trong một ứng dụng
Có thể trong một ứng dụng Android trên điện thoại có hai giao diện mạng được thiết lập để chỉ định cho một số yêu cầu http nhất định sử dụng một giao diện mạng và cho người khác sử dụng giao diện mạng khác không? Điều này cần phải được thực hiện thông qua các bảng định tuyến, không phải java?
Điện thoại tôi đang sử dụng là nexus bắt nguồn từ 6p.
Cập nhật:
Hiện nay, tôi đã có thể để có được một bộ chuyển đổi Ethernet làm việc với các thiết bị (Nexus 6P). Thiết bị được kết nối với mạng cục bộ qua Ethernet. Khi giao diện Wi-Fi tắt, tôi có thể ping tất cả các thiết bị trên mạng cục bộ mà thiết bị được kết nối với qua Ethernet. Tuy nhiên, tôi không thể truy cập máy chủ web (Không sử dụng DNS) của bất kỳ thiết bị nào trên mạng đó (mà tôi biết chúng đang chạy), tức là Http thông qua ứng dụng trình duyệt. Các nexus 6p được kết nối với mạng qua Ethernet thông qua một trạm Ubiquiti. Điều này có vẻ là một vấn đề định tuyến.
Tôi có thể chia sẻ kết nối (giao diện USB) và sử dụng Wi-Fi trong một ứng dụng, nhờ đó tôi tin rằng có thể sử dụng Ethernet và Wi-Fi.
Update2:
Sau khi thử nghiệm nhiều hơn, nó có vẻ là rằng nó là một vấn đề cho phép. Vì khi tôi ping mạng, thiết bị được kết nối với qua Ethernet mà không cần chạy đầu tiên su
trong thiết bị đầu cuối mạng không tồn tại. Tuy nhiên, khi tôi chạy su
thì ping, tôi có thể ping mạng. Vì vậy, có vẻ như ứng dụng của tôi cần có quyền superuser trước khi truy cập Ethernet. Tôi đã cấp quyền truy cập superuser, nhưng không có gì thay đổi. Tôi đọc rằng chỉ cần chạy su
là không đủ từ một trong các nhận xét trong số post này. Điều này là do su
chỉ sinh ra một vỏ gốc chết. Điều này cũng giải thích tại sao tôi không thể truy cập bất kỳ máy chủ web nào trên mạng này thông qua ứng dụng trình duyệt. Có thể cấp quyền truy cập ứng dụng của tôi vào giao diện Ethernet khi thực hiện các cuộc gọi HTTP như cung cấp quyền truy cập root HttpURLConnection
, nếu điều đó có ý nghĩa gì không (chạy su
không hoạt động)? Có vẻ như chắc chắn là một giải pháp vì HttpURLConnection có thể thực hiện cuộc gọi qua giao diện chia sẻ kết nối USB (Nexus 6P gọi nó là rndis0
).
Cập nhật 3:
Tôi tìm thấy trực tuyến here, mà tôi có thể làm cho ứng dụng của mình một ứng dụng hệ thống (nghĩ điều này có thể cấp quyền truy cập eth0 ứng dụng). Tôi vừa chuyển ứng dụng của mình sang /system/app
rồi khởi động lại. Tuy nhiên, điều này dường như không cung cấp cho các ứng dụng đặc quyền nữa (do đó không giải quyết được vấn đề), hoặc có cái gì khác cần thiết để làm cho hệ thống ứng dụng hơn là chỉ sao chép nó vào /system/app
.
Cập nhật 4:
Vì vậy, tôi đã có thể để có được Ethernet làm việc trên tất cả các ứng dụng mà không cần quyền root! Dường như nó chỉ hoạt động trên DHCP và không thích kết nối tĩnh mà tôi đang sử dụng. Nó hoạt động với Wi-Fi được kích hoạt, tuy nhiên, tôi không thể liên lạc với bất kỳ thiết bị nào trên mạng Wi-Fi khi Ethernet được bật. Có cách nào để giái quyết vấn đề này không?Nó có liên quan đến việc thiết lập hai cổng mặc định không?
Vì vậy, tôi đã thử phương pháp này. 'connectionManager.getAllNetworks()' dường như chỉ trả lại giao diện Wi-Fi (length = 1), khi tôi có Ethernet và Wi-Fi, và nó không trả về gì khi chỉ có Ethernet đang bật (length = 0). Thiết bị rõ ràng có giao diện kể từ khi chạy 'ifconfig' trả về' eth0' làm giao diện và tôi có thể ping các thiết bị như tôi đã nói ở trên. Tôi thậm chí đã thử di chuyển ứng dụng của mình sang ứng dụng hệ thống. Tuy nhiên, tôi cảm thấy như tôi đã bỏ lỡ một bước khi tạo hệ thống ứng dụng vì việc di chuyển nó sang '/ system/app' dường như hoàn toàn không làm gì cả. – dylan7
Chuyển sang root, sửa đổi người dùng và chủ nhóm của APK thành root. sau đó thay đổi quyền của APK thành 644. 'su',' chown root.root/system/app/your.apk', 'chmod 644/system/app/your.apk'. Sau đó, có thể có quyền truy cập thiết bị eth0 trong mã của bạn. – alijandro
Nếu bạn cho rằng có sự cố khi tạo ứng dụng hệ thống, hãy kiểm tra logcat. Bạn sẽ nhận được một lỗi cho phép khi ứng dụng cố gắng chạy các lệnh shell. – ekilic