andriod机扫描蓝牙5.0的扩展广播包(广播包最大可发送200多字节)

问题遇到的现象和发生背景 :
        目标设备是基于蓝牙5.0的,并向外以扩展广播的形式向外发送。网上流行的扫描方式我都基本验证过,均未能实现扫描扩展广播
问题相关代码,请勿粘贴截图 :
 初始化:
        BluetoothManager manager = (BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);
        BluetoothAdapter mBluetoothAdapter = manager.getAdapter();
        mBLEScanner = mBluetoothAdapter.getBluetoothLeScanner();
  回调:
 private ScanCallback litsenCallback =new ScanCallback() {
        @Override
        public void onScanResult(int callbackType, ScanResult result) {
            super.onScanResult(callbackType, result);
            try {
                BluetoothDevice bluetooth_Device = result.getDevice();
                int rssi = result.getRssi();
                System.out.println(bluetooth_Device);
                byte[] scanRecord = result.getScanRecord().getBytes();
                System.out.println(bluetooth_Device);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onBatchScanResults(List<ScanResult> results) {
            super.onBatchScanResults(results);
        }

        @Override
        public void onScanFailed(int errorCode) {
            super.onScanFailed(errorCode);
        }
    };
  回调:
 private ScanCallback litsenCallback =new ScanCallback() {
        @Override
        public void onScanResult(int callbackType, ScanResult result) {
            super.onScanResult(callbackType, result);
            try {
                BluetoothDevice bluetooth_Device = result.getDevice();
                int rssi = result.getRssi();
                System.out.println(bluetooth_Device);
                byte[] scanRecord = result.getScanRecord().getBytes();
                System.out.println(bluetooth_Device);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onBatchScanResults(List<ScanResult> results) {
            super.onBatchScanResults(results);
        }

        @Override
        public void onScanFailed(int errorCode) {
            super.onScanFailed(errorCode);
        }
    };



扫描参数:
private ScanSettings scanSettings = new ScanSettings.Builder()
        .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY ) //lowpower balanced lowlatency opportunistic
        .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES )   
        .setPhy(ScanSettings.PHY_LE_ALL_SUPPORTED)
        .build();

在某个按键下触发扫描 mBLEScanner.startScan(null,scanSettings,litsenCallback);

运行结果及报错内容 :
  这个方法是我经过多次尝试过后,简化过来的。但是并未能扫到周围扩展广播。基于java和kotlin的demo都看过,基本都一样,现在不知道怎么整改了
我的解答思路和尝试过的方法 :

之前使用的是比较旧的startLeScan,再后来 mBLEScanner.startScan(litsenCallback);在使用startScan后,能偶尔扫描到广播二三十字节的扩展广播,但取得数据内容有丢失,此外超出100字节后依然扫描不到。后来有人提了一句需要设置扫描参数,就是上述的代码贴出部分。

我想要达到的结果:
  开启蓝牙扫描后,能够实现扫描扩展广播(扩展广播最大能向外广播200多字节)与一般的BLE广播。nordic的nrf connecct安卓APP旧可以,我想扫描效果与改APP一致,如果后续扩展广播通信部分有一些不同,请一并告知,没有的话就不用了

img


加上这一句呢

参数好象不对。

https://blog.csdn.net/weixin_32956805/article/details/112998835?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-4.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-4.pc_feed_download_top3ask

你看看你是否满足:
数据部分的第一个字节表示数据的类型 AD Type ,剩下的 Len - 1 个字节是真正的数据 AD data 。其中 AD type 非常关键,决定了 AD Data 的数据代表的是什么和怎么解析。无效数据部分 :因为广播包的长度必须是 31 个 byte,如果有效数据部 分不到 31 自己,剩下的就用 0 补全。这部分的数据是无效的,解释的时候,忽略即可。在 Android 中,系统会把这两个数据拼接在一起,返回一个 62 字节的数组。