原文:Java代码实现AP向CP侧发送AT指令 - 开发者知识库
AT指令是什么本文就不再阐述了,有兴趣的小伙伴可以在网上搜索一下。
背景:通过设备通道比如:/dev/TTY22,来发送AT指令,实际上就是向该设备通道去写,读数据,已达到控制CP模块的目的。
public static boolean sendAtCmd(String fileName,String atcmd){
boolean atResult = false;//at指令的返回结果
Log.i(TAG, "fileName = " + fileName + ", atcmd = " + atcmd);
try {
BufferedWriter atWriter = new BufferedWriter(new FileWriter(fileName));
atWriter.write(atcmd, 0, atcmd.getBytes().length);
atWriter.flush();
atWriter.close();
atWriter = null;
//以上是往fileName该通道写入AT指令
//下面来读取该通道里的AT指令返回结果
BufferedReader atReader = new BufferedReader(new FileReader(fileName));
String readAtString = null;
char[] cReaderBuffer = new char[255];
int read_len = 0;
while(canRun){
read_len = atReader.read(cReaderBuffer, 0, cReaderBuffer.length-1);
Log.i(TAG, "read_len = " + read_len);
if(read_len > 0){
if(null == readAtString){
readAtString = String.copyValueOf(cReaderBuffer, 0, read_len);
}else{
readAtString = readAtString + String.copyValueOf(cReaderBuffer, 0, read_len);
}
Log.i(TAG, "readAtString = " + readAtString);
if(readAtString.indexOf("\r\nOK\r\n")>=0){
atResult = true ;
break;
}else if (readAtString.indexOf("ERROR")>=0){
atResult = false ;
break;
}
}
}
atReader.close();
atReader = null ;
}catch (FileNotFoundException e2) {
Log.e(TAG,"FileNotFoundException :" + fileName);
atResult = false ;
} catch (IOException e) {
atResult = false ;
e.printStackTrace();
}
return atResult;
}
需要注意的是:At指令的格式要正确比如:”AT+CFUN = 8 \r”,后面的”\r”必须要加。另外,由于是访问设备的通道,所以必须要有系统权限才可以,否则会出现FileNotFoundException 异常,所以要在AndroidManifest.xml文件中加入:android:sharedUserId=”android.uid.system”属性。
至此所有步骤已经完毕,如果你的通道可以正常的读写At指令的话,那么上述接口就可以使用了。