#android
#Android
Вопрос:
Как остановить «пинг»? Следующий код — это способ, которым я пытаюсь, но он терпит неудачу.
private class pingWifi implements Runnable {
Process p = null;
@Override
public void run() {
// TODO Auto-generated method stub
/*
* WifiInfo info=mWifiManager.getConnectionInfo(); int
* ip=info.getIpAddress(); String ips=Formatter.formatIpAddress(ip);
*/
System.out.println("pingWifi runnable");
String[] shell = new String[] { "/system/bin/sh", "-c", " " };
Runtime run = Runtime.getRuntime();
shell[2] = "ping " ipAddress;
try {
p = run.exec(shell);
if (p.waitFor() != 0) {
if (p.exitValue() == 1) {
byte[] buff = new byte[1024];
InputStream is = p.getErrorStream();
int c;
c = is.read(buff, 0, 1024);
System.out.println("ping error: " new String(buff));
}
} else {
byte[] buff = new byte[1024];
InputStream is = p.getInputStream();
int c;
c = is.read(buff, 0, 1024);
System.out.println("ping result: " new String(buff));
// wait for hardware
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
void stopProcess() {
if (p != null) {
p.destroy();
}else{
System.out.println("stopProcess: p==null");
}
}
}
private pingWifi mpingWifi = new pingWifi();
Thread wifiThread = new Thread(mpingWifi);
wifiThread.start();
В onPause я вызываю mpingWifi.stopProcess(), результатом является «stopProcess: p == null». И я все еще могу найти процесс ping в списке «ps».
Я также думаю использовать команду «pkill ping». но команда «pkill» не поддерживается в оболочке Android.Моя цель — пинг не «останавливается» до тех пор, пока не произойдет ключевое событие «home или back». Спасибо!
Ответ №1:
Попробуйте переопределить нажатие кнопки «Назад» и вызвать в нем Process.destroy().
Пример:
public void onBackPressed() {
p.destroy();
}
Комментарии:
1. @kioboar Спасибо за ваш ответ. что такое p?
2. Но я получаю «значение p равно нулю». Я думаю, что «ping 192.168.11.3» этот процесс всегда выполняется и не возвращает его точку в p . Итак, p равно нулю. Правильно ли это?
3. Где вы получаете значение p равно нулю? Успешно ли выполняется «p = run.exec (shell); «?
4. Я обновил свой вопрос. Вы можете проверить это еще раз. Спасибо. 🙂
5. @Judy Хм, я вижу, ты используешь ping -t. Но -t требует аргумента, но вы не предоставили никаких аргументов после -t . Кроме того, в Android есть команда kill вместо pkill, но я думаю, вам нужно быть root, чтобы вызвать kill при ping.