[Android源码分析]蓝牙搜索过程分析

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

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



在完成打开蓝牙的分析之后,我们就正式进入到蓝牙使用的阶段了。毫无疑问,我们第一个对蓝牙的操作当然就是扫描设备了。那就是这样一个点击“扫描设备”究竟干了些什么,晓东和大家来仔细分析一下。

         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.
                //若是在听音乐,也
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值