蓝牙耳机Priority设置流程

news/2024/10/18 14:20:36/

     当蓝牙耳机配对成功后,会发送一个BONDING_STATE_CHANGE的消息,在BondStateMachine状态机里会对这个消息进行处理,调用setProfilePriorty(dev)函数对当前的耳机进行优先级的设置

把以前的设置优先级顺序Hid、A2DP、Headset改为Headset、A2DP、Hid,请看这个函数修改后的具体code:

private void setProfilePriorty(BluetoothDevice device){

       HidService hidService = HidService.getHidService();

       A2dpService a2dpService = A2dpService.getA2dpService();

       HeadsetService headsetService = HeadsetService.getHeadsetService();

       if ((headsetService != null) &&

            (headsetService.getPriority(device)== BluetoothProfile.PRIORITY_UNDEFINED)){

            headsetService.setPriority(device,BluetoothProfile.PRIORITY_ON);

       }

       if ((a2dpService != null) &&

            (a2dpService.getPriority(device) ==BluetoothProfile.PRIORITY_UNDEFINED)){

            a2dpService.setPriority(device,BluetoothProfile.PRIORITY_ON);

       }

              if((hidService != null) &&

            (hidService.getPriority(device) ==BluetoothProfile.PRIORITY_UNDEFINED)){

           hidService.setPriority(device,BluetoothProfile.PRIORITY_ON);

       }

   }

会把当前耳机的Headset Profile 和A2DP Profile的优先级设置为PRIORITY_ON。

    当蓝牙耳机连接成功时,processProfileStateChanged函数会调用 setProfileAutoConnectionPriority(device,profileId)函数设置优先级,看修改后这个函数的具体code:

void setProfileAutoConnectionPriority(BluetoothDevice device, int profileId){

             HeadsetService  hsService = HeadsetService.getHeadsetService();

             A2dpService a2dpService =A2dpService.getA2dpService();

             if ((hsService != null) &&

               (BluetoothProfile.PRIORITY_AUTO_CONNECT !=hsService.getPriority(device))){

                 adjustOtherHeadsetPriorities(hsService,device);

                hsService.setPriority(device,BluetoothProfile.PRIORITY_AUTO_CONNECT);

             }

             if ((a2dpService != null)&&

               (BluetoothProfile.PRIORITY_AUTO_CONNECT != a2dpService.getPriority(device))){

                adjustOtherSinkPriorities(a2dpService, device);

                a2dpService.setPriority(device,BluetoothProfile.PRIORITY_AUTO_CONNECT);

             }

   }

会把当前耳机的Headset和A2DP的Profile优先级都设置为PRIORITY_AUTO_CONNECT,同时会把其他的耳机设备的优先级设为PRIORITY_ON,保证耳机自动连接优先级的设备只有一个。

蓝牙耳机自动连接过程:

当蓝牙打开时,如果有配对的蓝牙耳机存在,就会根据它的优先级,判断是否进行自动连接。如果优先级为PRIORITY_AUTO_CONNECT,该耳机就会自动进行连接。


http://www.ppmy.cn/news/836871.html

相关文章

CSR8675项目实战:BlueAg蓝牙一拖二发射器

为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板【淘宝链接:思度科技CSR开发板】。 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入群,赠PPT、项目源码、视频教程&#x…

蓝牙通用外观设置

蓝牙通用外观设置 在开发蓝牙设备时,需要设置蓝牙设备的外观,在代码中,通常这个关键字为appearance需要设置一个值,对于非通用设备,这个值一般为:0,对于是通用设备那么他是存在外观图标的&#…

ventura 双系统win之间切换蓝牙设备自动连接教程

ventura 双系统win之间切换蓝牙设备自动连接教程 见论坛有小伙伴在咨询ventura跟win双系统切换蓝牙鼠标无法自动连接上的问题,现在说说具体怎么设置才能实现双系统互换自动连接的教程,之前论坛上已经有大神发过类似的,并非原创,ve…

Android 9 原生设置关于蓝牙设置(五)

蓝牙配对及A2DP连接 参考:蓝牙配置流程 当点击设置界面的某个蓝牙设备时会调用DeviceListPreferenceFragment里面: 最终调用BluetoothDevicePreference.onClicked(),主要代码如下: 上面的逻辑里会根据不同的情况执行不同的…

手机蓝牙控制开关

先讲一下整体思路哈!手机肯定不能直接控制台灯的,需要一个中间物来协调,在这里我用的是51单片机(如果大家不知道也没关系,下面我还会说的)。接下来就是具体怎么控制的,其实原理挺简单的。1.手机…

算法-快速排序

go快速排序 时间复杂度:O(n) 空间复杂度:O(Nlog2n) 不稳定,较复杂 过程: 1、设置一个基点,通常为最左边或最右边,下面设置为最左边,设置设置两个指针分别指向数组两端 2、先移动右边指针,如果小于基点的值,则停止移动,并且把值覆盖到最左边的指针的值 3、覆盖之后,把最左边的指…

蓝牙广播时间设置

1CONN_INTERVAL (连接间隔) 就是两个连接事件之间的时间间隔,连接间隔以1.25为单位,连接间隔的值为6(7.5ms)~3200(4s).不同的应用可能要求不同的时间间隔。长的时间间隔的优势是显著地节省功耗,因为设备可以在连接事件…

【蓝牙模块】多主多从蓝牙模块介绍

蓝牙模块测试:多主多从模块测试步骤 FR8016HA_Module 透传模块介绍蓝牙模块测试:多主多从测试*有需要的可以联系:13631472459*模块图片 FR8016HA_Module 透传模块介绍 FR8016HA_Module模块是一款工业 级射频无线产品,支持蓝牙5.0…