Android Bluetooth源码分析

参考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)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iShaodong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值