AT 指令常见于设施间的无线通讯,蓝牙作为无线通讯的一员,也集成了少量 AT 批令,算 GSM AT 指令中的一个子集。Android 系统蓝牙模块提供少量标准的 AT 指令,也为厂商提供自己设置扩展的 AT 指令。
AT指令是应用于终端设施与PC应用之间的连接与通信的指令。AT 即Attention。每个 AT 命令行中只能包含一条 AT 指令;对于 AT 指令的发送,除 AT 两个字符外,最多可以接收 1056 个字符的长度(包括最后的空字符)。
Android 从 3.0 开始,应用可以注册接收由 Headset 设施发送的预约义的 AT 指令系统广播。例如,应用可以接收表明连接设施电量低的广播并且通知客户,或者其余需要的行为。可以创立一个广播接收器用 ACTION_VENDOR_SPECIFIC_HEADSET_EVENT 作为 intent 的 ACTION,解决 Headset 设施的自己设置 AT 指令,为蓝牙耳机制造厂商提供特定的 AT 命令。
HFP(Hands-free Profile) 和 HSP(Headset Profile)都是为了实现蓝牙通话而制定,所实现的功能都和蓝牙通话相关。基本所有的蓝牙耳机、车载蓝牙都会支持这两个协议。
HSP 仅实现了最基本的通话操作:接听电话、挂断电话、调节音量、声音在手机/蓝牙耳机之间切换。
HFP 在功能上是对 HSP 的扩展,除了上述功能以外,还包括控制三方通话、来电拒接、耳机端来电显示等高级功能,不过实现的方式,如用于控制的 AT CMD 完全不一样。
在 Android 设计上并没有将上述两个协议分开显示,而是均表述为“手机音频”,在使用的时候优先连接 HFP,只有在对方仅支持 HSP 或者 HFP 连接失败的时候才会尝试 HSP。
Intent used to broadcast that the headset has posted a vendor-specific event.
This intent will have 4 extras and 1 category.
The category is the Company ID of the vendor defining the vendor-specific command. BluetoothAssignedNumbers For example, for Plantronics specific events Category will be VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY.55
For example, an AT+XEVENT=foo,3 will get translated into
Requires Manifest.permission.BLUETOOTH permission to receive.
Constant Value: “android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT”
String ACTION_VENDOR_AT = "android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT";
IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ACTION_VENDOR_AT); registerReceiver(mFondDevieReceiver, intentFilter);
部份情况可能收不到广播,所以也可以用如下方式:
btIntentFilter = new IntentFilter(); btIntentFilter.addCategory(BluetoothHeadset.VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY + "." + BluetoothAssignedNumbers.PLANTRONICS); btIntentFilter.addAction(ACTION_VENDOR_AT); registerReceiver(btReceiver, btIntentFilter);
public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(ACTION_VENDOR_AT)) { Bundle extras = intent.getExtras(); String str = (String) extras.get(BluetoothHeadset.EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD); Object[] str3 = (Object[]) extras.get(BluetoothHeadset.EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS); mResult.setText("AT" + str + " = " + (Integer)str3[0]); } }
str 表示的是 AT 的指令,可以自己设置
Object[] str3 取到的是 “=” 号后面的几个以数,如:AT+XEVENT=foo,3
那么 str3 数据如下:
str3[0]:foo
str3[0]:3
str:+XEVENT
蓝牙交互中涉及到的标准 AT 指令有:
AT 指令 | 功能说明 |
---|---|
AT + BLDN | 重拨 |
AT+BVRA (AT+BVRA=0或者AT+BVRA=1) | 调用系统或者第三方的语音识别引擎 |
ATA | 接听来电 |
ATH | 挂机命令 |
AT+CHUP | 拒接来电 |
ATD%s | 拨号 |
AT+CHLD | 通话保持,多方解决 |
ATD>n | 快速拨号 |