Android AT指令发送后
1. 什么是AT指令?
AT指令(AT commands)是指一种用于控制调制解调器(Modem)的命令集合。AT是“ATTENTION”的缩写,最早由电话调制解调器制造商使用。后来,AT指令被广泛应用于各种设备,包括手机、蓝牙模块和GPS模块等。
AT指令使用文本格式,以字符“AT”起始,后面跟随具体的指令和参数。AT指令可以通过串口或者蓝牙等通信方式发送给设备,设备会根据指令执行相应的操作,并返回执行结果。
2. Android中的AT指令发送
在Android中,我们可以通过串口通信或者蓝牙通信发送AT指令给外部设备。在本文中,我们将重点介绍如何使用串口通信发送AT指令。
2.1. 准备工作
在使用串口通信发送AT指令之前,我们需要获取串口设备的读写权限。首先,在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
然后,在MainActivity中请求权限:
private static final int REQUEST_PERMISSION = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 请求权限
checkPermission();
}
private void checkPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_SETTINGS)
!= PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.MODIFY_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_NETWORK_STATE)
!= PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.WRITE_SETTINGS,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.MODIFY_PHONE_STATE,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.INTERNET}, REQUEST_PERMISSION);
} else {
// 已获取权限,执行后续操作
sendATCommand();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSION) {
boolean isAllGranted = true;
for (int grantResult : grantResults) {
if (grantResult != PackageManager.PERMISSION_GRANTED) {
isAllGranted = false;
break;
}
}
if (isAllGranted) {
// 权限已获取,执行后续操作
sendATCommand();
} else {
// 权限未获取,退出应用
Toast.makeText(this, "未获取到权限,应用无法正常运行!", Toast.LENGTH_SHORT).show();
finish();
}
}
}
2.2. 发送AT指令
通过串口通信发送AT指令需要借助Android的串口通信库,常用的库有FTDI D2xx
和USB Serial for Android
等。
在本文中,我们以USB Serial for Android
为例,介绍如何使用该库发送AT指令。
首先,在app的build.gradle文件中添加以下依赖:
dependencies {
implementation 'com.github.felHR85:UsbSerial:5.0.2'
}
然后,在MainActivity中创建发送AT指令的方法:
private static final int BAUD_RATE = 9600; // 波特率
private static final int DATA_BITS = UsbSerialPort.DATABITS_8; // 数据位
private static final int STOP_BITS = UsbSerialPort.STOPBITS_1; // 停止位
private static final int PARITY = UsbSerialPort.PARITY_NONE; // 校验位
private static final String USB_INTERFACE = "/dev/ttyUSB0"; // USB接口路径
private UsbSerialPort mSerialPort;
private UsbSerialDevice mSerialDevice;
private UsbManager mUsbManager;
private void sendATCommand() {
mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(m