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

问题描述 投票:1回答:1

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

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重启。我的代码有什么问题,或者是否有其他方法可以使用指定的时间和延迟进行调用?

android at-command
1个回答
0
投票

你需要在方法DataOutputStream范围内关闭onDestroy ...也可能需要Process.destroy() - 否则它本身不会被正确清理,并且可能会在尝试再次打开时崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.