Android4.4(MT8685)源码蓝牙解析--配对

本文详细介绍了在Android 4.4版本中,当用户在Settings的Bluetooth界面选择设备进行连接时,系统内部如何进行蓝牙配对的源码分析。重点讲解了在BluetoothSettings.java类中的BONDING_STATE_CHANGE事件处理,该部分负责处理设备的配对结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Settings的Bluetooth界面中,当用户点击当前的可连接设备时,系统会先对点击的设备进行配对,在BluetoothSettings.java类中对应的源码为:

@Override
    void onDevicePreferenceClick(BluetoothDevicePreference btPreference) {
        mLocalAdapter.stopScanning();
        super.onDevicePreferenceClick(btPreference);
    }

这是一个继承至父类的方法,这里首先会让系统停止搜索蓝牙设备,因为当在配对的过程中,同时搜索的话会出现" “Couldn’t pair with **device because of an   incorrect   PIN   or  passkey"的错误。接下来会调用父类的onDevicePreferenceClick方法,

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

这里会进入BluetoothDevicePreference的onClicked方法,

void onClicked() {
        int bondState = mCachedDevice.getBondState();

        if (mCachedDevice.isConnected()) {
            askDisconnect();
        } else if (bondState == BluetoothDevice.BOND_BONDED) {
            Xlog.d(TAG, mCachedDevice.getName() + " connect");
            mCachedDevice.connect(true);
        } else if (bondState == BluetoothDevice.BOND_NONE) {
            pair();
        }
    }
这里首先会获取当前蓝牙设备的状态,如果是已经连接的话,就断开连接;如果是已配对的话,就进行连接;如果是未配对的话,就进行配对,这里我们进入到pair方法:

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

这里通过CachedBluetoothDevice对象mCachedDevice调用startPairing方法,进去看看:

 boolean startPairing() {
        // Pairing is unreliable while scanning, so cancel discovery
        if (mLocalAdapter.isDiscovering()) {
            mLocalAdapter.cancelDiscovery();
        }

        if (!mDevice.createBond()) {
            return false;
        }

        mConnectAfterPairing = true;  // auto-connect after pairing
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值