Il modo in cui il ping viene implementato per ogni OEM (Original Equipment Manufacturer) può essere diverso. Questo non è solo limitato al ping. Ad esempio, prova a eseguire il comando linux du sui vecchi dispositivi Samsung (S3) e sui dispositivi più recenti (Motorola G) sulla shell adb.
L'S3 supporta du, ma non richiede alcuni parametri come -m (visualizzazione in megabyte), mentre i dispositivi più recenti come Moto G o anche dispositivi Samsung (passato Galaxy S5) lo supportano. Prova a eseguire ping -c 1 8.8.8.8 sulla shell adb all'interno di S3 e noterai che non è il tuo codice Java, è l'OEM.
Anche in questo caso, anche i comandi come i dumpsys hanno un output formattato in modo diverso a seconda della versione di Android e del dispositivo. Per questo motivo, sarebbe meglio se fosse possibile utilizzare un metodo completamente diverso per provare a eseguire il ping dell'IP desiderato utilizzando le API fornite in Android anziché utilizzare un processo con parametri che potrebbero essere diversamente supportati per OEM.
È inoltre possibile che le autorizzazioni siano diverse per dispositivo.
Quando si esegue un processo all'interno della propria app, si concedono le autorizzazioni limitate dell'app solo al processo. Quindi, se il ping richiede l'autorizzazione di livello root (sul dispositivo specifico), questo potrebbe anche essere il motivo per cui non funziona. In ultima analisi, spetta all'OEM il modo in cui hanno personalizzato Android.
Origine: Lavoro presso un OEM.
Lo hai testato su dispositivi rooted? –
No. Sto cercando un modo per farlo funzionare su dispositivi non-rooted. –
qualsiasi soluzione ottieni? –