我正在尝试实现一个具有一定时间间隔的短调用的应用程序。我需要程序在给定时间内拨打电话,然后呼叫停止,然后暂停,然后重新开始。这是一些代码示例,在按下按钮时运行:
private String commCall = "echo -e \"ATD1234567890;\\r\" > /dev/smd0\n";
private String commStop = "echo -e \"AT+CHUP\\r\" > /dev/smd0\n";
private Runnable testRunnable = new Runnable() {
@Override
public void run() {
try {
Process su = Runtime.getRuntime().exec("su");
DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());
outputStream.writeBytes(commCall);
outputStream.flush();
Thread.sleep(3000);
outputStream.writeBytes(commStop);
outputStream.flush();
outputStream.writeBytes("exit\n");
outputStream.flush();
su.waitFor();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
};
所以代码是对的。通话开始和停止。问题是当我终止程序(在任务菜单中滑动)然后再次执行runnable,调制解调器启动调用几毫秒然后冻结,然后android崩溃并重新启动。我可以在我的程序中使用最奇怪的东西,他们可以用拨号器拨打电话,然后再次使用该程序 - 一切都很好。但是,如果我(或android)杀死app进程,下次发送命令到调制解调器导致android重启。我的代码有什么问题,或者是否有其他方法可以使用指定的时间和延迟进行调用?
你需要在方法DataOutputStream
范围内关闭onDestroy
...也可能需要Process.destroy()
- 否则它本身不会被正确清理,并且可能会在尝试再次打开时崩溃。