Android 通过AT COMMAND发送短信,拨打电话

最近接到公司的项目,Android手机通过AT指令发送文本短信、数据短信。了解了一下模组,AT指令,短信猫,有需要的的小伙伴可以自行搜索了解。

首先Android手机要发送AT指令,手机必须要ROOT权限,本文使用的手机是Sony L50u,Android版本4.4.2版本。

Android手机发送AT指令,就是操作跟目录下/dev文件夹下的设备文件。

如果有Android Framework层开发应该知道RIL也可以发送AT指令。

App申请ROOT权限:

private boolean rootCommand(String command) {
        Process process = null;
        DataOutputStream os = null;

        try {
            process = Runtime.getRuntime().exec("su");
            os = new DataOutputStream(process.getOutputStream());
            os.writeBytes(command + "\n");
            os.writeBytes("exit\n");
            os.flush();
            int i = process.waitFor();
            if ((i != 0) || (!file.canRead()) || (!file.canWrite())) {
                return false;
            }

        } catch (Exception e) {
            e.printStackTrace();
            return false;

        } finally {
            if (os != null) {
                try {
                    os.close();
                    process.destroy();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }

        }
        return true;
    }

本文使用Linux命令 chmod 777 /dev/smd11文件,全开放文件读,写,执行权限。

发送AT指令:

void Send(String cmd) {
    char endChar = 26;
    char symbol1 = 13;
    try {
        if (localRandomAccessFile == null) {
            localRandomAccessFile = new RandomAccessFile("/dev/smd11", "rw");
        }
//1
        if (cmd.contains("0X1A")) {
            String data = cmd.replace("0X1A", "");
            String endCmd = data + endChar + symbol1;
            localRandomAccessFile.writeBytes(endCmd + "\r\n");
        } else {
            localRandomAccessFile.writeBytes(cmd + "\r\n");
        }

        Message.obtain(handler, 0, cmd + " 命令已发送到/dev/smd11").sendToTarget();
    } catch (Exception e) {
        Message.obtain(handler, 0, "/dev/smd11 发送出现错误:" + e.getMessage()).sendToTarget();
    } finally {
        try {
            if (localRandomAccessFile != null)
                localRandomAccessFile.close();
            localRandomAccessFile = null;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1,短信内容以0X1A结束,相当于短信猫中ctrl + z (16进制0x1A)发送短信。

接受AT指令返回结果:

void Receive() {
    try {
        if (localRandomAccessFileReceive == null) {
            localRandomAccessFileReceive = new RandomAccessFile("/dev/smd11", "r");
        }

        byte[] arrayOfByte = new byte[1024];
        int readSize = 0;
        while ((readSize = localRandomAccessFileReceive.read(arrayOfByte)) == -1) {

        }
        String str = new String(arrayOfByte).substring(0, readSize);
        Log.e("str", str);
        Message.obtain(handler, 0, "从/dev/smd11收到:" + str).sendToTarget();
    } catch (Exception e) {
        e.printStackTrace();
        Message.obtain(handler, 0, "/dev/smd11 获取出现错误:" + e.getMessage()).sendToTarget();
    }
}

发短信基本使用的AT指令:

发:AT

收:AT OK

发:AT+CMGF?

收:+CMGF:0或者1

发:AT+CMGF=0 //设置发送短信模式为PDU模式 1为TEXT模式

收:OK //错误返回ERROR

发:AT+CMGS="手机号" //此模式为TEXT模式,PDU模式为AT+CMGS=要发送短信内容长度

收:正确返回>

发:要发送短信内容 ctrl + z 发送短信

收:成功返回OK,失败返回ERROR : 错误码

其他AT指令若有需要请自行了解。

以上就是Android发送AT指令的内容。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值