以打开蓝牙为例
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)