1.功能描述
在某些特定的环境下,需要android设备既可以当source端(发送端)也要充当sink端(接收端)。
倘若只想实现一端在config.xml中配置就行。
本文以android 8.0为模板修改,其他版本可依葫芦画瓢-.-
2.实现思路
(1)首先请确认蓝牙模块是否支持sink/source端,不然敲半天白搞啦。
(2)了解下蓝牙通信流程图,手残画不好图,将就着看下吧。
我们重点改的是Framework和BluetoothApk,
(3)实现原理
A2dp比较重要的两个类
source端:A2dpService
sink端:A2dpSinkService
在做source时,只加载A2dpService,做sink时,只加载A2dpSinkService。听起来挺简单的,但实操不好弄啊
系统启动时会启动Bluetooth APK中的Service如A2dpService,在打开service之前会加载config.xml,以得知是否支持某种协议。
我们将改到以下文件,手残党不用再找路径了:
frameworks/base/core/java/android/bluetooth/IBluetooth.aidl
frameworks/base/core/java/android/bluetooth/BluetoothAdapter.java
frameworks/base/core/java/android/bluetooth/IBluetoothManager.aidl
frameworks/base/services/core/java/com/android/server/BluetoothManagerService.java
packages/apps/Bluetooth/res/values/config.xml
packages/apps/Bluetooth/src/com/android/bluetooth/a2dp/A2dpService.java
packages/apps/Bluetooth/src/com/android/bluetooth/a2dpsink/A2dpSinkService.java
packages/apps/Bluetooth/src/com/android/bluetooth/btservice/AdapterService.java
packages/apps/Bluetooth/src/com/android/bluetooth/btservice/Config.java
packages/apps/Bluetooth/src/com/android/bluetooth/hfp/HeadsetService.java