最近接到公司的项目,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指令的内容。
本文详细介绍了如何在Android手机上通过AT指令发送文本和数据短信,包括获取ROOT权限,操作/dev/smd11设备文件,以及使用特定的AT指令进行短信的发送和接收。示例代码展示了发送和接收AT指令的过程,并给出了常见的短信发送AT命令。
2172





