1
、开启
步骤
1
:首先从BTSettings开始,执行onCreate方法。因为是初始化状态,所以
if
(action.equal(BTDevicePicker.ACTION_LAUNCH))不满足,故执行
else
语句。
步骤
2
:初始化mEnable对象,调用BTEnable构造函数。通过LocalBTManager.getInstance调用init方法,再通过init方法调用BTAdapter.getDefaultAdapter()获得适配器句柄。
步骤
3
:各种初始化完毕后,执行BTSettings中的onResume方法,调用BTEnabler.resume方法,该resume方法为组合框设置监听事件。
步骤
4
:当蓝牙开启时,该组合框被选中,将响应监听事件,执行BTEnabler.onPreferenceChange方法。该方法中会调用LocalBTManager.setBTEnabled方法。而setBTEnabled方法会调用BTAdapter.enable()方法,继而调用BTService.enable()方法,继而调用BTService.enable(
true
)方法。在该方法中,
(
1
)当enable(
true
)方法返回
true
时,在setBTEnabled方法中会调用BTService中的setBTStateInt方法,继而广播出去,由BTEventRedirector类接收。
(
2
)开启新的线程,主要的启动过程是放在这个新启动的线程里面。
(
3
)开启蓝牙后,会调用CachedBTDeviceManager.onBTStateChanged方法来读取上次关闭前搜索到的蓝牙设备。
2
.可检测的
点击“可检测性”组合框,将触发BTDiscoverableEnabler.onPreferenceChange方法,然后调用同个类中的setEnabled方法,来调用BTAdapter.setScanMode方法(其中传递SCAN_MODE_CONNECTABLE_DISCOVERABLE参数),继而会调用BTService.setScanMode方法,在该方法中,会通过setDiscoverableTimeout方法设置检测时间。
3
.扫描
BTSettings的onResume方法继续往下运行,将调用LocalBTManager.startScanning方法,该方法会调用BTAdapter.startDiscovery方法,继而调用BTService.startDiscovery方法,再调用startDIscoveryNative方法。
4
.连接
步骤
1
:在setting界面点击连接,会调到CachedBluetoothDevice类的connect方法。
步骤
2
:而connect方法会调用connectWithoutResettingTimer()方法。
步骤
3
:而connectWithoutResettingTimer()方法会调用 connectInt方法。
步骤
4
:在connectInt里,根据不同的profile来获得profilemanger,然后调用 profilemanger.connect()函数 。此处的链接会涉及到的profile有A2DP AVRCP DUN HSP HFP 等。
同理如果配对或者解除配对,也会调到CachedBluetoothDevice类的pair()方法和unpair()。