将AT命令发送到调制解调器

时间:2018-09-04 16:48:50

标签: android at-command

我正在尝试实现一个在一定时间间隔内进行短呼叫的应用程序。我需要程序在给定的时间内拨打电话,然后电话停止,然后暂停,然后重新开始。 这是一些代码示例,该示例在单击按钮时运行:

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重新启动。我的代码有什么问题,或者也许还有其他方法可以在指定的时间和延迟内进行呼叫?

1 个答案:

答案 0 :(得分:0)

您需要在方法DataOutputStream的范围内关闭onDestroy ...那里也可能需要Process.destroy()-否则其自身将无法正确清理,并且可能尝试再次打开它时会崩溃。