2015-09-23 35 views
6

Tôi có đoạn code sau đây trong ứng dụng của tôi ...Tại sao ping hoạt động trên một số thiết bị chứ không phải các thiết bị khác?

Runtime runtime = Runtime.getRuntime(); 
Process process = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); 
return process.waitFor(); 

... và tôi thấy rằng nó hoạt động (trả về 0) trên một số thiết bị (ví dụ như Motorola G) nhưng không hoạt động (lợi nhuận 2) trên các thiết bị khác (ví dụ: Galaxy S3). Tôi đã kiểm tra thiết bị Galaxy S3 và nó chắc chắn có một tập tin "/ system/bin/ping" và tất nhiên tôi đã chắc chắn rằng nó thực sự được kết nối với internet.

Bất cứ ai cũng có bất kỳ ý tưởng nào tại sao lệnh có thể không hoạt động trên một số thiết bị ... và những gì tôi có thể làm để làm cho thiết bị hoạt động?

+0

Bạn đã thử nghiệm trên thiết bị được root chưa? –

+0

No. Tôi đang tìm cách để làm việc này trên các thiết bị không bắt nguồn từ. –

+0

bất kỳ giải pháp nào bạn nhận được? –

Trả lời

16

Cách ping được thực hiện cho mọi OEM (Nhà sản xuất thiết bị gốc) có thể khác nhau. Điều này không chỉ giới hạn trong ping. Ví dụ, hãy thử chạy lệnh linux du trên các thiết bị Samsung cũ (S3) và các thiết bị mới hơn (Motorola G) trên vỏ adb.

S3 không hỗ trợ du, nhưng không mất một số thông số như -m (hiển thị bằng megabyte), trong khi các thiết bị mới hơn như Moto G hoặc thậm chí thiết bị Samsung (qua Galaxy S5) không hỗ trợ. Hãy thử chạy ping -c 1 8.8.8.8 trên adb shell trong S3, và bạn sẽ lưu ý rằng nó không phải là mã Java của bạn, đó là OEM.

Một lần nữa, ngay cả các lệnh như dumpsys có định dạng đầu ra khác nhau tùy thuộc vào Phiên bản Android và thiết bị. Bởi vì điều này, sẽ tốt nhất nếu bạn có thể sử dụng một phương pháp hoàn toàn khác để thử ping IP mong muốn bằng cách sử dụng các API được cung cấp trong Android thay vì sử dụng một quá trình với các tham số có thể được hỗ trợ khác nhau trên mỗi OEM.

Cũng có thể là các quyền khác nhau trên mỗi thiết bị.

Khi bạn chạy một quy trình trong ứng dụng của mình, bạn chỉ đang cấp quyền hạn chế của ứng dụng cho quy trình. Vì vậy, nếu ping yêu cầu quyền root (trên thiết bị cụ thể), đó cũng có thể là lý do tại sao nó không hoạt động. Đó là cuối cùng lên đến OEM của cách họ tùy chỉnh Android.

Nguồn: Tôi làm việc tại OEM.

+0

Hey Bạn có thể giải thích cho tôi cách chạy "ping -c 1 8.8 .8.8 trên vỏ adb "vì tôi đang đối mặt với cùng một vấn đề. ping trên làm việc trên thiết bị 4.2.2 (nếu công trình mất nhiều thời gian hơn 25000ms) làm thế nào tôi có thể giải quyết điều này? –

+0

Punit, lệnh 'ping' không thể được gọi một cách đáng tin cậy trên tất cả các thiết bị Android. –

+0

sau đó làm thế nào để giải quyết vấn đề này vì tôi đang sử dụng dòng này "runtime.exec (" ping -c 1 "+ url)" nhưng nó không hoạt động cho các thiết bị 4.2.2 và hoạt động tương tự khá tốt cho các thiết bị khác –

Các vấn đề liên quan