在完成打开蓝牙的分析之后,我们就正式进入到蓝牙使用的阶段了。毫无疑问,我们第一个对蓝牙的操作当然就是扫描设备了。那就是这样一个点击“扫描设备”究竟干了些什么,晓东和大家来仔细分析一下。
1、扫描设备按键的处理
代码的实现看起来很清晰,
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ID_SCAN:
//点击搜索,首先检查是否打开BT
if (mLocalAdapter.getBluetoothState() == BluetoothAdapter.STATE_ON) {
//开始扫描
startScanning();
}
return true;
所以,就是调用 startScanning来进行真正的扫描操作。该函数的代码实现如下:
private void startScanning() {
//这里就是若是开始没有搜索过,第一次搜索需要显示那个搜索到的设备的那个组的ui
if (!mAvailableDevicesCategoryIsPresent) {
getPreferenceScreen().addPreference(mAvailableDevicesCategory);
}
//这里的true,就是强制扫描,强制扫描和不强制扫描的差别,我们后面来看
mLocalAdapter.startScanning(true);
}
void startScanning(boolean force) {
// Only start if we're not already scanning
//先检查是否正在扫描。
if (!mAdapter.isDiscovering()) {
if (!force) {
// Don't scan more than frequently than SCAN_EXPIRATION_MS,
// unless forced
//不是强制扫描,则5分钟之内再次搜索不响应 if (mLastScan + SCAN_EXPIRATION_MS > System.currentTimeMillis()) {
return;
}
// If we are playing music, don't scan unless forced.
//若是在听音乐,也

本文详细分析了Android中点击‘扫描设备’时的处理流程,从应用层到框架层再到JNI层,深入探讨startDiscovery函数以及bluez中的StartDiscovery方法,揭示蓝牙设备扫描的内部工作机制。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



