首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BluetoothLeScanner从不调用它的任何回调方法

BluetoothLeScanner从不调用它的任何回调方法
EN

Stack Overflow用户
提问于 2019-08-08 20:46:02
回答 1查看 133关注 0票数 2

我对Android和Kotlin非常陌生,所以我可能会弄错一些非常简单的东西,但就我所看到的,当我调用BluetoothLeScanner.startScan()时,我创建的ScanCallback类的可能回调方法都没有被调用过。

我知道在API级别23及以上,仅仅将位置权限放在清单中可能是不够的,所以我已经编写了代码来处理这一问题&我的应用程序同时具有粗略和精细的位置权限,这让我感到满意

下面是我对OnScanResult方法的覆盖:

代码语言:javascript
复制
override fun onScanResult(callbackType: Int, result: ScanResult?) {
    super.onScanResult(callbackType, result)
    mScan = true
}

我在每个回调方法中都设置了一个断点,当我在代码运行时将鼠标悬停在这些断点上时,我看到消息"No executable code found at line...“这是一个非常令人不安的消息(我怀疑它指出了问题所在),但是(a)当一切正常构建时,怎么会没有代码呢?(b)你对此做了什么?更新:我认为这条信息是在转移注意力。我现在已经将断点移到了回调函数中的其他位置,并且我不再看到“没有可执行代码”的消息。看起来Android Studio允许您在没有实际代码的行上放置一个断点!因此,我们回到了最初的问题--为什么我们没有收到回调?

看起来这个问题现在解决了:(1)我确实在手机上找到了一个与打开位置不同的设置。它启用了蓝牙扫描。然而,这实际上并没有什么不同(2)看起来真正的问题是对使用setDeviceName()传递给ScanFilter构建器的字符串的含义的误解。在我们的硬件蓝牙模块中有一个字符串,我们正在尝试扫描它,它被称为设备名称,我正在扫描它。当我转而寻找Beacon广告数据时,它找到了它。

非常感谢你的建议(我想只有1条)

EN

回答 1

Stack Overflow用户

发布于 2020-03-20 23:03:36

在清单中授予权限与使用它的应用程序不同。对于ble,您需要提供位置和蓝牙权限。然后:

  • 在应用程序中(在手机上)浏览您打开的应用程序
  • 找到您的应用程序并单击左上角的3个点
  • 单击应用程序info
  • Permissions
  • Toggle位置到

下面是一小段方便的代码:

代码语言:javascript
复制
public void checkPermission() {
        if (Build.VERSION.SDK_INT >= 23) {
            if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

            } else {
                ActivityCompat.requestPermissions(this, new String[]{
                        Manifest.permission.ACCESS_FINE_LOCATION,
                        Manifest.permission.ACCESS_COARSE_LOCATION,}, 1);
            }
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
        } else {
            checkPermission();
        }
    }

Ps是安全的

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

https://stackoverflow.com/questions/57412943

复制
相关文章

相似问题

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