在leScanCallback中,device.getName()在少数设备上返回null

时间:2017-10-27 06:23:40

标签: android ibeacon android-bluetooth

检查了以下帖子但对我的案例没有帮助:

BluetoothDevice always returns null on getName()

我的问题

我正在开发一个扫描附近蓝牙设备并在主屏幕上显示的应用程序。但是在少数设备上(即moto G,samsung note2),leScanCallback上的设备名称为空。

我的代码

private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {

    @Override
    public void onLeScan(final BluetoothDevice device, final int rssi,
                         byte[] scanRecord) {
       if (device.getName() != null){//<<- Here it null on few device
           //my process          
        }
  }
};

注意: 如果它返回null我需要抛出一个警报,但是我无法在onlescan中执行此操作,因为连续扫描。在此之前我需要根据蓝牙版本向用户发出警报是否可能以及为什么在少数设备上我不会获得设备名称?提前谢谢。

1 个答案:

答案 0 :(得分:0)

广告的第一次检测中未填充名称字段,因为它来自单独的ScanResponse数据包,该数据包直到您获得的广告回调之后才会到达。

这意味着您必须持有对扫描返回的BluetoothDevice对象的引用,并等待几秒钟以查看是否填充了该名称。