参考1:http://my.oschina.net/u/1436933/blog/192060
参考2:http://blog.csdn.net/baimy1985/article/details/8892410
参考3:http://www.cnphp6.com/archives/3883
========================================================================================
一、Bluetooth调用路径:
Settings -> Bluetooth -> framework -> bluedroid -> hci -> chip
========================================================================================
二、Bluetooth关键类管理流程:
—— A2dpProfile < ———— > BluetoothA2dp <————> A2dpService <—————> A2dpStateMachine <————>
| (注册Listener监听profile的连接状态) (bind到A2dpService) (采用状态机管理) (jni机制)
com_android_bluetooth_a2dp <————> blueDroid <————> HCI
|...
—— LocalBluetoothProfile <——>|
| (管理所有的profiles) |
| —— HidProfile < ———— > BluetoothHid <————> HidService <—————> com_android_bluetooth_hid <————> blueDroid <————> HCI
| (注册Listener监听profile的连接状态) (bind到HidService) (jni机制)
| —— AdapterStateMachine
LLocalBluetoothManager|—— LocalBluetoothApater <——> BluetoothAdapter <————> BluetoothManagerService <————> AdapterService < ————> | 均通过JniCallback回调
(上层本地蓝牙管理类)| (本地Adpater) (调用远端的实现) (开启/关闭) (蓝牙远端服务管理类) (负责开启/关闭及其它profile服务的管理) —— BondStateMachine
|
|
—— BluetoothEventManager <————> CachedBluetoothDeviceManager
(注册广播监听蓝牙状态变更、蓝牙设备状态)
========================================================================================
//分析路径一
~/Project/cts/tests/tests/bluetooth/src/android/bluetooth/cts/BasicAdapterTest.java
==>Line258:private void enable(BluetoothAdapter adapter)
==>Line267:adapter.enable()
~/Project/frameworks/base/core/java/android/bluetooth/BluetoothAdapter.java
==>Line507:public boolean enable()
==>Line508:if (isEnabled() == true)
==>Line442:public boolean isEnabled()
==>Line446:if (mService != null) return mService.isEnabled()
==>Line359:private IBluetooth mService
~/Project/frameworks/base/core/java/android/bluetooth/IBluetooth.aidl//IBluetooth.aidl,是通过进程间通信,调用到了BluetoothService.java里的enable()
==>Line30:interface IBluetooth
==>Line32:boolean isEnabled()
~/Project/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/bluetooth/IBluetooth.java
==>Line542:@Override public boolean isEnabled() throws android.os.RemoteException
==>android.os.Parcel _data = android.os.Parcel.obtain()
==>android.os.Parcel _reply = android.os.Parcel.obtain()
~/Project/frameworks/base/core/java/android/os/Parcel.java
==>Line290:public static Parcel obtain()
......
......
========================================================================================
//分析路径二
参考资料:http://blog.csdn.net/yutao52shi/article/details/12690353(Android4.2蓝牙Enable完全分析)
http://blog.csdn.net/baimy1985/article/details/8922508( android -- 蓝牙 bluetooth (二) 打开蓝牙)
~/Project/cts/tests/tests/bluetooth/src/android/bluetooth/cts/BasicAdapterTest.java
==>Line258:private void enable(BluetoothAdapter adapter)
==>Line267:adapter.enable()
~/Project/frameworks/base/core/java/android/bluetooth/BluetoothAdapter.java
==>Line507:public boolean enable()
==>Line513:return mManagerService.enable()
BluetoothManagerService.java
==>
BluetoothAdapter.java=>enable()
BluetoothManagerService.java=>enable
BluetoothManagerService.java=>handleEnable()
AdapterService.java=>enable(boolean quietMode)