Android BLE- ScanCallBack 从未在 BluetoothLeScanner.startScan() 上调用

Android BLE- ScanCallBack is never called on BluetoothLeScanner.startScan()

我正在尝试使用 BluetoothLeScanner 开发 Beacon 定位器,但问题是从未调用过 ScanCallBack,准确地说,既没有调用 onScanResult、onScanFailed 也没有调用 onBatchScanResults 方法。 我附近有信标发射器,可通过 Play 商店中的信标定位器应用程序检测到。我不确定我是否遗漏了什么。以下是我正在使用的代码。

首先我在清单中添加了以下权限:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

创建 BluetoothLeScanner 对象的代码:

 Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
 getApplicationContext().startActivity(enableBtIntent);
 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
 mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();
 mBluetoothLeScanner.startScan(mScanCallback);

扫描回调:

protected ScanCallback mScanCallback = new ScanCallback() {
@Override
    public void onScanResult(int callbackType, ScanResult result) {
    ScanRecord mScanRecord = result.getScanRecord();
    byte[] manufacturerData = mScanRecord.getManufacturerSpecificData(224);
    int mRssi = result.getRssi();
}

@Override
public  void  onScanFailed(int errorCode){
    Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_LONG);
}
};

我还确保 none 的对象值是 null,它们都已完美初始化。此外,在 API 24 的多个设备上进行了测试,所以我认为这也不是问题。 感谢您的帮助。

谢谢

经过大量研究,我发现 Beacon 定位器的最佳解决方案是使用 altbeacon library。可以在线找到有关如何使用该库的各种教程。我建议他们的官方网站最好参考: https://altbeacon.github.io/android-beacon-library/samples.html 如果有人对我用于实现信标定位器的代码感兴趣,请在下面发表评论,我很乐意与您分享。