Bluetooth (Android) 之自己设置 AT 指令
来源:Android丶SE     阅读:718
云上智慧
发布于 2019-08-22 03:03
查看主页

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.

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”

四、实例

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

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
Swift实现十大常见算法+各种树
Javascript中常用的13种设计模式
在Swift中自己设置Codable类型
CoinCap API 查询数字货币市场数据 - 区块链数据开发实战
Linux FC-SAN存储搭建
首页
搜索
订单
购物车
我的