代码流程分析二:Settings-蓝牙分析-点击配对连接设备原理分析

这篇博客详细解析了Android系统中蓝牙设备的配对和连接过程,从Settings应用的点击事件开始,深入到frameworks层、蓝牙服务、JNI层以及HAL层,涉及到的关键方法包括startPairing、createBond等,揭示了蓝牙设备从搜索、配对到连接的内部工作流程。
摘要由CSDN通过智能技术生成

蓝牙配对功能


配对手机,配对蓝牙耳机,配对电脑



(一)设置界面packages\Settings


A:搜索调用的地方:点击preference因为下面的条目是单独的一个所以到了blueetoothSettings的父类中。

目录:android\packages\apps\Settings\src\com\android\settings\bluetooth\DeviceListPreferenceFragment.java

void onDevicePreferenceClick(BluetoothDevicePreference btPreference) {
       
btPreference.onClicked();
    }


B:

目录:android\packages\apps\Settings\src\com\android\settings\bluetooth\BluetoothDevicePreference.java

void onClicked() {
        int bondState = mCachedDevice.getBondState();
        if (mCachedDevice.isConnected()) {
            askDisconnect();------------------------断开连接
        } else if (bondState == BluetoothDevice.BOND_BONDED) {
            mCachedDevice.connect(true);已经配对了就连接
        } else if (bondState == BluetoothDevice.BOND_NONE) {
            pair();---------------------------没有配对就配对
        }
    }

private void pair() {
        if (!mCachedDevice.startPairing()) {
            Utils.showError(getContext(), mCachedDevice.getName(),
                    R.string.bluetooth_pairing_error_message);
        }
    }

C:配mCachedDevice.startPairing())

目录:android\packages\apps\Settings\src\com\android\settings\bluetooth\CachedBluetoothDevice.java

 boolean startPairing() {
        if(mLocalAdapter.checkPairingState() == true)
        {
            return true;------------------------------正在配对就终止该方法
        }
        mLocalAdapter.setPairingState(true);
        if (mLocalAdapter.isDiscovering()) {
            mLocalAdapter.cancelDiscovery();------------------当前设备正在搜索,就取消搜索
        }

        if (!mDevice.createBond()) {
            mLocalAdapter.setPairingState(false);
            return false;
        }
        mConnectAfterPairing = true;  // auto-connect after pairing
        return true;
    }


(二)走到frameworks


D:配对mDevice.createBond()

目录:android\frameworks\base\core\java\android\bluetooth\bluetoothDevice.java

 public boolean createBond() {
..............
            return sService.createBond(this);
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return false;
    }

 private staticIBluetooth sService;


(三)走到frameworks的aidl文件

E:aidl文件

目录:android\frameworks\base\core\java\android\bluetooth\IBluetooth.aidl

boolean
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值