Bluetooth (Android) 之自己设置 AT 指令
AT 指令常见于设施间的无线通讯,蓝牙作为无线通讯的一员,也集成了少量 AT 批令,算 GSM AT 指令中的一个子集。Android 系统蓝牙模块提供少量标准的 AT 指令,也为厂商提供自己设置扩展的 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 与 HSP 的区别
HFP(Hands-free Profile) 和 HSP(Headset Profile)都是为了实现蓝牙通话而制定,所实现的功能都和蓝牙通话相关。基本所有的蓝牙耳机、车载蓝牙都会支持这两个协议。
HSP 仅实现了最基本的通话操作:接听电话、挂断电话、调节音量、声音在手机/蓝牙耳机之间切换。
HFP 在功能上是对 HSP 的扩展,除了上述功能以外,还包括控制三方通话、来电拒接、耳机端来电显示等高级功能,不过实现的方式,如用于控制的 AT CMD 完全不一样。
在 Android 设计上并没有将上述两个协议分开显示,而是均表述为“手机音频”,在使用的时候优先连接 HFP,只有在对方仅支持 HSP 或者 HFP 连接失败的时候才会尝试 HSP。
三、ACTION_VENDOR_SPECIFIC_HEADSET_EVENT 说明
Intent used to broadcast that the headset has posted a vendor-specific event.
This intent will have 4 extras and 1 category.
- BluetoothDevice#EXTRA_DEVICE – The remote Bluetooth Device
- EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD – The vendor specific command
- EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE – The AT command type which can be one of AT_CMD_TYPE_READ, AT_CMD_TYPE_TEST, or AT_CMD_TYPE_SET, AT_CMD_TYPE_BASIC,AT_CMD_TYPE_ACTION.
- EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS – Command arguments.
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
- EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD = +XEVENT
- EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE = AT_CMD_TYPE_SET
- EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS = foo, 3
Requires Manifest.permission.BLUETOOTH permission to receive.
Constant Value: “android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT”
四、实例
4.1 公告
String ACTION_VENDOR_AT = "android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT";4.2 注册广播
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);4.3 广播解析
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 指令 | 功能说明 |
|---|---|
| AT + BLDN | 重拨 |
| AT+BVRA (AT+BVRA=0或者AT+BVRA=1) | 调用系统或者第三方的语音识别引擎 |
| ATA | 接听来电 |
| ATH | 挂机命令 |
| AT+CHUP | 拒接来电 |
| ATD%s | 拨号 |
| AT+CHLD | 通话保持,多方解决 |
| ATD>n | 快速拨号 |
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Bluetooth (Android) 之自己设置 AT 指令