高通平台 android7.1 蓝牙的可见性设置

1、情景

本机设备只打开蓝牙开关,但不停留在设置里面蓝牙页面时,其他设备扫描不到本机设备。

2、Android7.1中,默认的行为是,只有在设置里面的蓝牙页面,才会开启蓝牙的可见性;如果只是打开下拉栏的蓝牙快捷开关,是不会开启蓝牙可见性的。

3、需求:

(1)打开蓝牙时,直接打开蓝牙可见性

(2)不停留在设置里面蓝牙页面时,要扫描到本机设备

4、需求一的解决方案:

打开蓝牙时,直接打开蓝牙可见性。如下:

路径:****/packages/apps/Bluetooth/src/com/android/bluetooth/btservice/AdapterProperties.java

复制代码
void onBluetoothReady() {
        Log.d(TAG, "ScanMode =  " + mScanMode );
        Log.d(TAG, "State =  " + getState() );

        // When BT is being turned on, all adapter properties will be sent in 1
        // callback. At this stage, set the scan mode.
        synchronized (mObject) {
            if (getState() == BluetoothAdapter.STATE_TURNING_ON &&
                    mScanMode == BluetoothAdapter.SCAN_MODE_NONE) {
                    /* mDiscoverableTimeout is part of the
                       adapterPropertyChangedCallback received before
                       onBluetoothReady */
                    if (mDiscoverableTimeout != 0)
					  //setScanMode(AbstractionLayer.BT_SCAN_MODE_CONNECTABLE);
                      setScanMode(AbstractionLayer.BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE);
                    else /* if timeout == never (0) at startup */
                      setScanMode(AbstractionLayer.BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE);
                    /* though not always required, this keeps NV up-to date on first-boot after flash */
                    setDiscoverableTimeout(mDiscoverableTimeout);
            }
        }
    }

如上图: 将 setScanMode(AbstractionLayer.BT_SCAN_MODE_CONNECTABLE); 改为

setScanMode(AbstractionLayer.BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE);即可。

5、需求二的解决方案,如下:

路径:******/packages/apps/Settings/src/com/android/settings/bluetooth/BluetoothSettings.java

复制代码
@Override
    public void onPause() {
        super.onPause();
        if (mBluetoothEnabler != null) {
            mBluetoothEnabler.pause();
        }

        // Make the device only visible to connected devices.
        //mLocalAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE);

        if (isUiRestricted()) {
            return;
        }

        getActivity().unregisterReceiver(mReceiver);
    }

如上图,在onPause()方法中将mLocalAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE);注释掉即可。

相关推荐
Proud lion23 分钟前
Apipost 脚本高频场景最佳实践:搞定接口签名验证、登录令牌刷新、动态参数生成等
android
介一安全34 分钟前
【Frida Android】实战篇5:SSL Pinning 证书绑定绕过 Hook 教程(二)
android·网络安全·逆向·安全性测试·frida
2501_9371931441 分钟前
PLB-TV 影视!无广告 + 4K 高清
android·源码·源代码管理·机顶盒
阿斌_bingyu7091 小时前
uniapp实现android/IOS消息推送
android·ios·uni-app
Android系统攻城狮1 小时前
Android内核进阶之周期更新PCM状态snd_pcm_period_elapsed:用法实例(九十二)
android·pcm·android内核·音频进阶
Cola可洛2 小时前
修复Flyme移植BUG
android·bug
消失的旧时光-19432 小时前
Kotlinx.serialization 使用指南
android·kotlin·json
消失的旧时光-19433 小时前
Kotlinx.serialization 项目集成
android·kotlin·json
梦里不知身是客114 小时前
datax如何做增量导入
android
我是好小孩5 小时前
【Android】RecyclerView的高度问题、VH复用概念、多子项的实现;
android·java·网络