一种基于Android系统的蓝牙音频设备自适应连接方法转让专利

申请号 : CN201910811608.5

文献号 : CN110519735A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 鲁霖蒋少彬

申请人 : 厦门市思芯微科技有限公司

摘要 :

本发明属于蓝牙通信设备连接方法领域,具体涉及一种基于Android系统的蓝牙音频设备自适应连接方法,一种基于Android系统的蓝牙音频设备自适应连接方法,涉及蓝牙设备和移动数据终端;所述移动数据终端包括蓝牙连接模块;移动数据终端安装有蓝牙自连接APP;具体包括:蓝牙自连接APP注册BroadcastReceiver;初始化获取蓝牙音频设备适配器BluetoothAdapter和BluetoothA2dp;开启移动数据终端蓝牙连接模块搜索功能,并启动搜索超时定时器;蓝牙自连接APP对已搜索到的蓝牙音频设备与预设设备名称进行匹配等。有益效果:解决现有技术方案中APP无法直接自动连接蓝牙音频设备的问题,实现APP对蓝牙音频设备的自适应连接和音频输出,减少用户操作难度,改善使用体验。

权利要求 :

1.一种基于Android系统的蓝牙音频设备自适应连接方法, 其特征在于包括以下步骤:步骤一(S101)、蓝牙自连接APP注册BroadcastReceiver;

步骤二(S102)、注册成功后,蓝牙自连接APP初始化获取蓝牙音频设备适配器BluetoothAdapter和BluetoothA2dp;

步骤三(S103)、蓝牙自连接APP开启移动数据终端蓝牙连接模块搜索功能,并启动搜索超时定时器;

步骤四(S104)、蓝牙自连接APP对已搜索到的蓝牙音频设备与预设设备名称进行匹配;

若匹配,则停止搜索;若未匹配,则继续搜索直至超时取消搜索;

步骤五(S105)、蓝牙自连接APP检测蓝牙音频设备绑定状态;

步骤六(S106)、蓝牙自连接APP若检测到蓝牙音频设备未绑定,则执行绑定操作;

步骤七(S107)、蓝牙自连接APP监听已绑定的蓝牙音频设备状态,开启连接超时倒计时;

步骤八(S108)、在倒计时结束之前,蓝牙自连接APP若无法连接上蓝牙音频设备,则开启反射机制连接蓝牙音频设备。

2.根据权利要求1所述的一种基于Android系统的蓝牙音频设备自适应连接方法,其特征在于步骤一(S101)为:蓝牙自连接APP注册BroadcastReceiver,其中含有的广播:BluetoothDevice.ACTION_FOUND(发现蓝牙音频设备广播)BluetoothDevice.ACTION_BOND_STATE_CHANGED(蓝牙音频设备绑定状态变化)BluetoothDevice.ACTION_PAIRING_REQUEST(蓝牙音频设备配对码请求)BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED(蓝牙音频设备连接状态变化)。

3.根据权利要求1所述的一种基于Android系统的蓝牙音频设备自适应连接方法,其特征在于步骤二(S102)为:初始化获取BluetoothAdapter对象:mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();获取BluetoothA2dp对象:

new BluetoothProfile.ServiceListener() {    public void onServiceConnected(int profile, BluetoothProfile proxy) {            mBluetoothA2dp = (BluetoothA2dp) proxy;    }

    public void onServiceDisconnected(int profile) {    }

}。

4.根据权利要求1所述的一种基于Android系统的蓝牙音频设备自适应连接方法,其特征在于步骤三(S103)为:开启搜索功能的方位:

mBluetoothA2dp. startDiscovery();

超时取消搜索的方法:

 Observable.timer(5, TimeUnit.SECONDS).subscribe(aLong -> {    mBluetoothAdapter.cancelDiscovery(); })。

5.根据权利要求1所述的一种基于Android系统的蓝牙音频设备自适应连接方法,其特征在于步骤四(S104)为:获取搜索到的蓝牙音频设备方法:

蓝牙自连接APP通过监听BluetoothDevice.ACTION_FOUND上报;

if (BluetoothDevice.ACTION_FOUND.equals(action)) {BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);   if(device.getName == name){      mDevice = device;}

}。

6.根据权利要求1所述的一种基于Android系统的蓝牙音频设备自适应连接方法,其特征在于步骤五(S105)为:检测绑定状态的方法:

通过mBluetoothAdapter获取所有已绑定蓝牙音频设备:public boolean isBond(String mac) {    Set bondedDevices = mBluetoothAdapter.getBondedDevices();       for (BluetoothDevice device : bondedDevices) {            if (mac.equals(device.getAddress())) {                return true;            }

        }

        return false;    }。

7.根据权利要求1所述的一种基于Android系统的蓝牙音频设备自适应连接方法,其特征在于步骤六(S106)为:绑定操作的方法:

bluetoothDevice.createBond()。

8.根据权利要求1所述的一种基于Android系统的蓝牙音频设备自适应连接方法,其特征在于步骤七(S107)为:蓝牙自连接APP监听BluetoothDevice.ACTION_BOND_STATE_CHANGED广播;在收到BluetoothDevice.ACTION_BOND_STATE_CHANGED广播后,通过intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1);获取state为BluetoothDevice.BOND_BONDED之后开启倒计时;若在倒计时结束前无法接收到BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED广播且state为state == BluetoothA2dp.STATE_CONNECTING,则开始步骤八(S108);

倒计时方法:

   Message message = new Message();   message.what = MSG_WHAT_A2DP_CONNECT;   Bundle bundle = new Bundle();   bundle.putParcelable("device", device);   message.setData(bundle);   handler.sendMessageDelayed(message, 2000)。

9.根据权利要求1所述的一种基于Android系统的蓝牙音频设备自适应连接方法,其特征在于步骤八(S108)为:采用反射机制再次进行连接:

先从BluetoothA2dp中获取它的类:Class bluetoothA2dpClass = BluetoothA2dp.class;然后从类中获取方法“connect”和“setPriority”进行连接;

Class bluetoothA2dpClass = BluetoothA2dp.class;try {

  Method  connect  =  bluetoothA2dpClass.getMethod("connect", BluetoothDevice.class); connect.invoke(mBluetoothA2dp, device);} catch  (NoSuchMethodException  |  IllegalAccessException  | InvocationTargetException e) {    e.printStackTrace();}

try {

    Method setPriority = bluetoothA2dpClass.getMethod("setPriority", BluetoothDevice.class, int.class);    setPriority.invoke(mBluetoothA2dp, device, 1000);} catch  (NoSuchMethodException  |  IllegalAccessException  | InvocationTargetException e) {    e.printStackTrace();}。

10.根据权利要求1至9任一项所述的一种基于Android系统的蓝牙音频设备自适应连接方法,其特征在于:所述移动数据终端为台式电脑、智能手机、平板电脑、笔记本电脑、智能穿戴设备。

说明书 :

一种基于Android系统的蓝牙音频设备自适应连接方法

技术领域

[0001] 本发明属于蓝牙通信设备连接方法领域,具体涉及一种基于Android系统的蓝牙音频设备自适应连接方法。

背景技术

[0002] 目前,随着安卓系统的不断普及,在蓝牙音频设备接入智能语音系统之后,蓝牙音频设备使用量快速增加。虽然安卓系统平台为APP提供了许多实用的APIs,但是对蓝牙音频设备的连接还停留在手动设置蓝牙连接的阶段。目前,APP内部实现蓝牙自适应连接和音频输出已成为热门研究课题之一。

发明内容

[0003] 为解决上述技术问题,本发明提供了一种基于Android系统的蓝牙音频设备自适应连接方法,通过优化方法步骤,使APP自动进行蓝牙连接,有效简化操作步骤,具有较高的通用性,便捷性,有效地改善用户体验。。
[0004] 具体技术方案为:一种基于Android系统的蓝牙音频设备自适应连接方法,方法中使用硬件包括蓝牙设备和移动数据终端;所述移动数据终端包括蓝牙连接模块;移动数据终端安装有蓝牙自连接APP;包括以下步骤:
步骤一(S101)、蓝牙自连接APP注册BroadcastReceiver;
步骤二(S102)、注册成功后,蓝牙自连接APP初始化获取蓝牙音频设备适配器BluetoothAdapter和BluetoothA2dp;
步骤三(S103)、蓝牙自连接APP开启移动数据终端蓝牙连接模块搜索功能,并启动搜索超时定时器;
步骤四(S104)、蓝牙自连接APP对已搜索到的蓝牙音频设备与预设设备名称进行匹配;
若匹配,则停止搜索;若未匹配,则继续搜索直至超时取消搜索;
步骤五(S105)、蓝牙自连接APP检测蓝牙音频设备绑定状态;
步骤六(S106)、蓝牙自连接APP若检测到蓝牙音频设备未绑定,则执行绑定操作;
步骤七(S107)、蓝牙自连接APP监听已绑定的蓝牙音频设备状态,开启连接超时倒计时;
步骤八(S108)、在倒计时结束之前,蓝牙自连接APP若无法连接上蓝牙音频设备,则开启反射机制连接蓝牙音频设备。
[0005] 优选的,一种基于Android系统的蓝牙音频设备自适应连接方法中,步骤一(S101)为:蓝牙自连接APP注册BroadcastReceiver,其中含有的广播:BluetoothDevice.ACTION_FOUND(发现蓝牙音频设备广播)
BluetoothDevice.ACTION_BOND_STATE_CHANGED(蓝牙音频设备绑定状态变化)BluetoothDevice.ACTION_PAIRING_REQUEST(蓝牙音频设备配对码请求)BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED(蓝牙音频设备连接状态变化)。
[0006] 优选的,一种基于Android系统的蓝牙音频设备自适应连接方法中,步骤二(S102)为:初始化获取BluetoothAdapter对象:
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
获取BluetoothA2dp对象:
new BluetoothProfile.ServiceListener() {
    public void onServiceConnected(int profile, BluetoothProfile proxy) {
            mBluetoothA2dp = (BluetoothA2dp) proxy;
    }
    public void onServiceDisconnected(int profile) {
    }
}
[0007] 优选的,一种基于Android系统的蓝牙音频设备自适应连接方法中,步骤三(S103)为:开启搜索功能的方位:
mBluetoothA2dp. startDiscovery();
超时取消搜索的方法:
 Observable.timer(5, TimeUnit.SECONDS).subscribe(aLong -> {
    mBluetoothAdapter.cancelDiscovery();
 })
[0008] 优选的,一种基于Android系统的蓝牙音频设备自适应连接方法中,步骤四(S104)为:获取搜索到的蓝牙音频设备方法:
蓝牙自连接APP通过监听BluetoothDevice.ACTION_FOUND上报;
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
  if(device.getName == name){
     mDevice = device;
}
}
[0009] 优选的,一种基于Android系统的蓝牙音频设备自适应连接方法中,步骤五(S105)为:检测绑定状态的方法:
通过mBluetoothAdapter获取所有已绑定蓝牙音频设备:
public boolean isBond(String mac) {
    Set bondedDevices = mBluetoothAdapter.getBondedDevices();
       for (BluetoothDevice device : bondedDevices) {
            if (mac.equals(device.getAddress())) {
                return true;
            }
        }
        return false;
    }
[0010] 优选的,一种基于Android系统的蓝牙音频设备自适应连接方法中,步骤六(S106)为:绑定操作的方法:
bluetoothDevice.createBond()
[0011] 优选的,一种基于Android系统的蓝牙音频设备自适应连接方法中,步骤七(S107)为:蓝牙自连接APP监听BluetoothDevice.ACTION_BOND_STATE_CHANGED广播;在收到BluetoothDevice.ACTION_BOND_STATE_CHANGED广播后,通过intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1);获取state为BluetoothDevice.BOND_BONDED之后开启倒计时;若在倒计时结束前无法接收到BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED广播且state为state == BluetoothA2dp.STATE_CONNECTING,则开始步骤八(S108);
倒计时方法:
   Message message = new Message();
   message.what = MSG_WHAT_A2DP_CONNECT;
   Bundle bundle = new Bundle();
   bundle.putParcelable("device", device);
   message.setData(bundle);
   handler.sendMessageDelayed(message, 2000)
[0012] 优选的,一种基于Android系统的蓝牙音频设备自适应连接方法中,步骤八(S108)为:采用反射机制再次进行连接:
先从BluetoothA2dp中获取它的类:
Class bluetoothA2dpClass = BluetoothA2dp.class;
然后从类中获取方法“connect”和“setPriority”进行连接;
Class bluetoothA2dpClass = BluetoothA2dp.class;
try {
  Method connect  = bluetoothA2dpClass.getMethod("connect", 
BluetoothDevice.class);
 connect.invoke(mBluetoothA2dp, device);
} catch  (NoSuchMethodException |  IllegalAccessException  | 
InvocationTargetException e) {
    e.printStackTrace();
}
try {
    Method setPriority = bluetoothA2dpClass.getMethod("setPriority", BluetoothDevice.class, int.class);
    setPriority.invoke(mBluetoothA2dp, device, 1000);
} catch  (NoSuchMethodException |  IllegalAccessException  | 
InvocationTargetException e) {
    e.printStackTrace();
}
[0013] 优选的,一种基于Android系统的蓝牙音频设备自适应连接方法中,移动数据终端为台式电脑、智能手机、平板电脑、笔记本电脑、智能穿戴设备。
[0014] 采用了上述技术方案后,本发明的有益效果是:相对于已披露的技术方案,本技术方案将通过提供一种基于Android系统的蓝牙音频设备自适应连接方法,解决现有技术方案中APP无法直接自动连接蓝牙音频设备的问题,实现APP对蓝牙音频设备的自适应连接和音频输出,减少用户操作难度,改善使用体验。

附图说明

[0015] 图1是一种基于Android系统的蓝牙音频设备自适应连接方法步骤的流程示意图。

具体实施方式

[0016] 实施例一一种基于Android系统的蓝牙音频设备自适应连接方法,方法中使用硬件包括蓝牙设备和移动数据终端;移动数据终端为台式电脑、智能手机、平板电脑、笔记本电脑、智能穿戴设备;本实施例移动数据终端以一部智能手机为例。
[0017] 具体步骤如附图1所示:步骤一(S101)、蓝牙自连接APP注册BroadcastReceiver;蓝牙自连接APP注册BroadcastReceiver,其中含有的广播:
BluetoothDevice.ACTION_FOUND(发现蓝牙音频设备广播)
BluetoothDevice.ACTION_BOND_STATE_CHANGED(蓝牙音频设备绑定状态变化)BluetoothDevice.ACTION_PAIRING_REQUEST(蓝牙音频设备配对码请求)BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED(蓝牙音频设备连接状态变化)。
[0018] 步骤二(S102)、注册成功后,蓝牙自连接APP初始化获取蓝牙音频设备适配器BluetoothAdapter和BluetoothA2dp;初始化获取BluetoothAdapter对象:mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
获取BluetoothA2dp对象:
new BluetoothProfile.ServiceListener() {
    public void onServiceConnected(int profile, BluetoothProfile proxy) {
            mBluetoothA2dp = (BluetoothA2dp) proxy;
    }
    public void onServiceDisconnected(int profile) {
    }
}
[0019] 步骤三(S103)、蓝牙自连接APP开启移动数据终端蓝牙连接模块搜索功能,并启动搜索超时定时器;开启搜索功能的方位:mBluetoothA2dp. startDiscovery();
超时取消搜索的方法:
 Observable.timer(5, TimeUnit.SECONDS).subscribe(aLong -> {
    mBluetoothAdapter.cancelDiscovery();
 })
[0020] 步骤四(S104)、蓝牙自连接APP对已搜索到的蓝牙音频设备与预设设备名称进行匹配;若匹配,则停止搜索;若未匹配,则继续搜索直至超时取消搜索;获取搜索到的蓝牙音频设备方法:蓝牙自连接APP通过监听BluetoothDevice.ACTION_FOUND上报;
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
  if(device.getName == name){
     mDevice = device;
}
}
[0021] 步骤五(S105)、蓝牙自连接APP检测蓝牙音频设备绑定状态;检测绑定状态的方法:通过mBluetoothAdapter获取所有已绑定蓝牙音频设备:
public boolean isBond(String mac) {
    Set bondedDevices = mBluetoothAdapter.getBondedDevices();
       for (BluetoothDevice device : bondedDevices) {
            if (mac.equals(device.getAddress())) {
                return true;
            }
        }
        return false;
    }
[0022] 步骤六(S106)、蓝牙自连接APP若检测到蓝牙音频设备未绑定,则执行绑定操作;绑定操作的方法:
bluetoothDevice.createBond()
[0023] 步骤七(S107)、蓝牙自连接APP监听已绑定的蓝牙音频设备状态,开启连接超时倒计时;蓝牙自连接APP监听BluetoothDevice.ACTION_BOND_STATE_CHANGED广播;在收到BluetoothDevice.ACTION_BOND_STATE_CHANGED广播后,通过intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1);获取state为BluetoothDevice.BOND_BONDED之后开启倒计时;若在倒计时结束前无法接收到BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED广播且state为state == BluetoothA2dp.STATE_CONNECTING,则开始步骤八(S108);倒计时方法:
   Message message = new Message();
   message.what = MSG_WHAT_A2DP_CONNECT;
   Bundle bundle = new Bundle();
   bundle.putParcelable("device", device);
   message.setData(bundle);
   handler.sendMessageDelayed(message, 2000)
[0024] 步骤八(S108)、在倒计时结束之前,蓝牙自连接APP若无法连接上蓝牙音频设备,则开启反射机制连接蓝牙音频设备。采用反射机制再次进行连接:先从BluetoothA2dp中获取它的类:
Class bluetoothA2dpClass = BluetoothA2dp.class;
然后从类中获取方法“connect”和“setPriority”进行连接;
Class bluetoothA2dpClass = BluetoothA2dp.class;
try {
  Method connect  = bluetoothA2dpClass.getMethod("connect", 
BluetoothDevice.class);
 connect.invoke(mBluetoothA2dp, device);
} catch  (NoSuchMethodException |  IllegalAccessException  | 
InvocationTargetException e) {
    e.printStackTrace();
}
try {
    Method setPriority = bluetoothA2dpClass.getMethod("setPriority", BluetoothDevice.class, int.class);
    setPriority.invoke(mBluetoothA2dp, device, 1000);
} catch  (NoSuchMethodException |  IllegalAccessException  | 
InvocationTargetException e) {
    e.printStackTrace();
}
[0025]  由技术常识可知,本技术方案可以通过其它的不脱离其精神实质或必要特征的实施方案来实现。因此,上述公开的实施方案,就各方面而言,都只是举例说明,并不是仅有的。所有在本发明范围内或在等同于本发明的范围内的改变均被本发明包含。