Android Bluetooth architecture

 

以打开蓝牙为例

1. UI  packages/apps/Settings/src/com/android/settings/bluetooth/

BluetoothDashboardFragment.java     BluetoothSwitchPreferenceController.java     BluetoothEnabler.java

BluetoothEnabler.java
onSwitchToggled(boolean isChecked)
   mLocalAdapter.setBluetoothEnabled(isChecked)

 

2. frameworks/base/

frameworks/base/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java
public boolean enable() 
    mAdapter.enable();

frameworks/base/core/java/android/bluetooth/BluetoothAdapter.java
enable()  @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
  mManagerService.enable(ActivityThread.currentPackageName()  IBluetoothManager mManagerService;

 system/bt/binder/android/bluetooth/IBluetoothManager.aidl

frameworks/base/services/core/java/com/android/server/BluetoothManagerService.java 
  BluetoothManagerService extends IBluetoothManager.Stub
  
 enable(String packageName) 
    //检查权限
   sendEnableMsg()
     mHandler.sendMessage(mHandler.obtainMessage(MESSAGE_ENABLE))
 BluetoothHandler.handleMessage()
   case MESSAGE_ENABLE
      handleEnable(mQuietEnable)
        doBind(IBluetooth.class.getName())
BluetoothServiceConnection.onServiceConnected
  mHandler.obtainMessage(MESSAGE_BLUETOOTH_SERVICE_CONNECTED)
  
BluetoothHandler.handleMessage(MESSAGE_BLUETOOTH_SERVICE_CONNECTED)  
  mBluetooth = IBluetooth.Stub.asInterface(Binder.allowBlocking(service))
  mBluetooth.registerCallback(mBluetoothCallback)
  mBluetooth.enable()

3.   packages/apps/Bluetooth Bluetooth.apk
system/bt/service/common/android/bluetooth/IBluetooth.aidl
class AdapterServiceBinder extends IBluetooth.Stub
packages/apps/Bluetooth/src/com/android/bluetooth/btservice/AdapterService.java 
enable()
   AdapterService.enable()e
      enable(false)
         mAdapterStateMachine.sendMessage(AdapterState.BLE_TURN_ON)
         


packages/apps/Bluetooth/src/com/android/bluetooth/btservice/AdapterState.java
OffState(BLE_TURN_ON)
  transitionTo(mTurningBleOnState)
  
TurningBleOnState:
   enter()  
     mAdapterService.bringUpBle()
        mRemoteDevices.reset()
        mAdapterProperties.init(mRemoteDevices)
        mBondStateMachine = BondStateMachine.make(this, mAdapterProperties, mRemoteDevices
        setProfileServiceState(GattService.class, BluetoothAdapter.STATE_ON)
           startService(GattService.class,ACTION_SERVICE_STATE_CHANGED)

GattService.java/ProfileService.java

BleOnState (USER_TURN_ON)         
   transitionTo(mTurningOnState)
TurningOnState
   enter()
       mAdapterService.startProfileServices()
       
packages/apps/Bluetooth/src/com/android/bluetooth/btservice/AdapterService.java 
startProfileServices() 
     mAdapterProperties.onBluetoothReady();
     updateUuids();
     setBluetoothClassFromConfig();
     mAdapterStateMachine.sendMessage(AdapterState.BREDR_STARTED);     

TurningOnState(BREDR_STARTED)
  transitionTo(mOnState)
     
         
         
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值