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

时间:2017-10-04 17:33:13

标签: android bluetooth-lowenergy android-bluetooth android-ibeacon android-ble

我正在尝试使用BluetoothLeScanner开发Beacon定位器,但问题是从不调用ScanCallBack,准确地说,无论是onScanResult,onScanFailed还是onBatchScanResults都没有调用。 我有位于我附近的信标发射器,可通过游戏商店提供的信标定位器应用程序进行检测。我不确定我是否遗漏了什么。以下是我正在使用的代码。

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

<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);

ScanCallBack:

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);
}
};

我还确保没有任何对象值为null,所有这些都是完美的初始化。此外,在使用API​​ 24的多个设备上进行了测试,因此我认为这也不是问题。 感谢您的帮助。

由于

1 个答案:

答案 0 :(得分:1)

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