Bluetooth (Android) 之自己设置 AT 指令

  • 时间:2019-08-22 03:03 作者:Android丶SE 来源:Android丶SE 阅读:715
  • 扫一扫,手机访问
摘要:AT 指令常见于设施间的无线通讯,蓝牙作为无线通讯的一员,也集成了少量 AT 批令,算 GSM AT 指令中的一个子集。Android 系统蓝牙模块提供少量标准的 AT 指令,也为厂商提供自己设置扩展的 AT 指令。一、AT 指令详情AT指令是应用于终端设施与PC应用之间的连接与通信的指令。AT 即A

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快速拨号

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】Fortigate飞塔防火墙如何开启DNS转发/DNS代理(2025-10-14 23:58)
【系统环境|】有了它,再也不用担心电脑弹窗广告和病毒啦!(2025-10-14 23:57)
【系统环境|】如何关闭恼人的电脑弹窗广告?2招搞定(2025-10-14 23:55)
【系统环境|】实用软件推荐:电脑广告弹窗多?用他,都给你屏蔽掉!(2025-10-14 23:55)
【系统环境|】Nginx篇01——基本安装配置和静态页面设置(2025-10-14 23:54)
【系统环境|】Linux端口开放,查看,删除,防火墙(2025-10-14 23:53)
【系统环境|】安全HTTP头部配置: 基于CSP与HSTS的Web安全策略(2025-10-14 23:52)
【系统环境|】老K:做私域过1000万的赛道全部都聚焦在女性身上!(2025-10-14 23:51)
【系统环境|】JavaScript跨域问题: 如何解决跨域访问和资源共享的安全策略(2025-10-14 23:51)
【系统环境|】家庭七级财务防火墙(2025-10-14 23:50)
手机二维码手机访问领取大礼包
返回顶部