首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android ScanCallBack从未在BluetoothLeScanner.startScan()上被调用

Android ScanCallBack从未在BluetoothLeScanner.startScan()上被调用
EN

Stack Overflow用户
提问于 2017-10-04 17:33:12
回答 1查看 1.1K关注 0票数 0

我正在尝试使用BluetoothLeScanner开发一个信标定位器,但问题是从来没有调用过ScanCallBack,确切地说,既没有调用onScanResult、onScanFailed,也没有调用onBatchScanResults。我有灯塔发射器位于我附近,这是由信标定位应用程序检测到在游戏商店。我不确定我是不是错过了什么。下面是我正在使用的代码。

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

代码语言:javascript
复制
<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对象的代码:

代码语言:javascript
复制
 Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
 getApplicationContext().startActivity(enableBtIntent);
 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
 mBluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();
 mBluetoothLeScanner.startScan(mScanCallback);

ScanCallBack:

代码语言:javascript
复制
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);
}
};

我还确保没有一个对象值是空的,它们都是完全初始化的。此外,使用API 24在多个设备上进行测试,所以我认为这也不是一个问题。感谢你的帮助。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-30 16:44:09

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46570854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档