android4.3 中兴s291天机 发送AT指令
废话少说直接来干货!!!想要让手机发送AT指令,必须有以下操作:
1 root手机
2 找到modem层,也就是调制解调器的入口
3 发送正确的AT指令
第一步:
root手机这里就不多说了,自己百度去方法一大堆
第二步:
找到调制解调器的入口,android手机要发送AT命令获取信息,需要把AT命令发送到/dev目录下的其中一些设备,/dev目录下的文件很多,可能每台手机都不同,也不是每个都是,只能一个个去试了.
在这里我建议尝试的小伙伴一定要有耐心,因为在/dev目录下,大概有700多个文件,对每个文件测试的时候都需要先获取其超级用户权限,然后再写入AT,如果返回OK,则代表成功找到入口
s291天机的入口是”/dev/smd11”,这个我已经试好了没有问题.
获取其超级用户权限,代码如下:
public boolean getsu() {
if ((!this.device.canRead()) || (!this.device.canWrite())) {
try {
String command = "chmod -R 777 " + ATD_PATH;
Process localProcess = Runtime.getRuntime().exec(new String[]{"su", "-c", command});
localProcess.waitFor();
if ((localProcess.waitFor() != 0) || (!this.device.canRead()) || (!this.device.canWrite())) {
return false;
}
Log.i("YY", "su:OK ");
return true;
} catch (Exception localException) {
localException.printStackTrace();
Log.i("YY", "su exception:ERROR ");
return false;
}
}
return true;
}
第三步:
发送AT指令和接收数据,例如发送AT,返回OK
发送AT指令的代码如下:
public void Send(String file, String cmd) {
RandomAccessFile localRandomAccessFile = null;
try {
localRandomAccessFile = new RandomAccessFile(file, "rw");
Log.e(TAG, "Send: " + file);
localRandomAccessFile.writeBytes(cmd + "\r\n");
localRandomAccessFile.close();
} catch (Exception e) {
e.printStackTrace();
}
}
接收数据的代码如下:
public void Receive(String file) {
RandomAccessFile localRandomAccessFile = null;
try {
localRandomAccessFile = new RandomAccessFile(file, "r");
byte[] arrayOfByte = new byte[1024];
int readSize = 0;
while ((readSize = localRandomAccessFile.read(arrayOfByte)) == -1) {
}
final String response = new String(arrayOfByte).substring(0, readSize);
StringBuffer string = new StringBuffer();
for (int i = 0; i < arrayOfByte.length; i++) {
string.append(arrayOfByte[i]);
}
} catch (Exception e) {
isRunning = false;
Log.e(TAG, "system.err" + ATD_PATH + "有异常");
e.printStackTrace();
}
}
到这里发送at指令的流程基本完成!!!
有不懂的地方可在下方评论,空闲的时候会回复!!!