我正在尝试实现一个在一定时间间隔内进行短呼叫的应用程序。我需要程序在给定的时间内拨打电话,然后电话停止,然后暂停,然后重新开始。 这是一些代码示例,该示例在单击按钮时运行:
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();
}
}
};
所以代码正确。通话正在开始和停止。问题是当我终止程序(在任务菜单中滑动)然后再次执行可运行程序时,调制解调器开始调用几毫秒,然后冻结,然后android崩溃并重新启动。我可以在程序中使用的最奇怪的东西是,他们可以使用拨号程序拨打电话,然后再次使用该程序-一切都很好。但是,如果我(或Android)杀死了应用程序进程,则下次发送命令到调制解调器导致Android重新启动。我的代码有什么问题,或者也许还有其他方法可以在指定的时间和延迟内进行呼叫?
答案 0 :(得分:0)
您需要在方法DataOutputStream
的范围内关闭onDestroy
...那里也可能需要Process.destroy()
-否则其自身将无法正确清理,并且可能尝试再次打开它时会崩溃。