java - 为什么 bluetoothAdapter 回调在连接 BLE 设备时抛出错误?

标签 java android bluetooth-lowenergy

我正在使用 BluetoothAdapter 并尝试连接 BLE 设备。 当我尝试检测 BLE 设备时,它会抛出以下错误

2018-12-17 18:19:03.374 15642-15663/? E/ScanRecord: unable to parse scan record: [2, 1, 5, 17, 6, 67, 79, 77, 46, 72, 65, 78, 78, 65, 73, 78, 83, 84, 95, -80, -1, 2, -1, 0, 21, 9, 72, 73, 49, 48, 56, 51, 50, 32, 112, 72, 32, 49, 49, 32, 97, 110, 100, 32, 50, 32, 5, 18, -112, 0, -96, 0, 2, 10, 0, 0, 0, 0, 0, 0, 0, 0]
2018-12-17 18:19:03.375 15642-15663/? E/BtGatt.JNI: An exception was thrown by callback 'btgattc_scan_result_cb'.
2018-12-17 18:19:03.376 15642-15663/? E/BtGatt.JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.util.SparseArray.get(int)' on a null object reference
        at android.bluetooth.le.ScanRecord.getManufacturerSpecificData(ScanRecord.java:104)
        at android.bluetooth.le.ScanFilter.matches(ScanFilter.java:317)
        at com.android.bluetooth.gatt.GattService.matchesFilters(GattService.java:883)
        at com.android.bluetooth.gatt.GattService.onScanResult(GattService.java:781)

我在 Pixel(Android 版本 28)和诺基亚手机上运行这个应用程序,这些手机是普通的 Android 设备。无法找到任何解决方案。 我已请求位置许可。附加我的代码的某些部分以更好地理解它。

Android list

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:minSdkVersion="18" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:hardwareAccelerated="true"
    android:theme="@style/AppTheme"
    tools:ignore="GoogleAppIndexingWarning">
  <service
    android:name="com.lab.BluetoothLeService"
    android:enabled="true"
    android:exported="true"
    tools:ignore="ExportedService">
   </service>

调用 startLeScan

 if(bluetoothAdapter!= null) {
            bluetoothAdapter.startLeScan(mLeScanCallback);
        }

回调

 private BluetoothAdapter.LeScanCallback mLeScanCallback =
        new BluetoothAdapter.LeScanCallback() {
            @Override
            public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) {
                printScanRecord(scanRecord);
                StringBuilder scanData = new StringBuilder(scanRecord.length);
                for (byte dataByte : scanRecord) {
                    scanData.append(String.format("%02X ", dataByte).trim());
                }

                String scanResult = scanData.toString().trim();

                Log.e("SCAN DATA", scanResult );

                });

但是在非android设备上我没有发现空指针异常。

正在寻找可以连接到我的 BLE 设备的解决方案。

最佳答案

因为宣传的厂家数据不对

0xff 0x00

制造商数据必须在 0xff 之后至少两个字节。这两个字节应标识制造商。

关于java - 为什么 bluetoothAdapter 回调在连接 BLE 设备时抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53844676/

相关文章:

java - 传递给 CompletableFuture.exceptionally() 的异常处理程序是否必须返回有意义的值?

android - 使用 Android-Espresso 运行多个测试时出现内存不足异常

iOS 低功耗蓝牙 : unable to connect using stored pairing data

android - BLE 通知订阅获得 133

java - 从java中的LinkedList中删除倒数第二个节点

java - 如何从 Java 程序返回一些值给 shell?

android - 加速回收器查看 "swipe"动画?

android - 如何在 Instagram 分享中获得回调

android - 如何在手机休眠时保持网络通讯畅通

java - aspectj 中注释的优先顺序