java - openGattServer(context, mGattServerCallback) 似乎没有打开 gattserver,为什么?
问题描述
我正在尝试在我的应用程序中创建一个 gattserver,因此它可以充当外围设备。首先,我注意到我为中央(客户端)编写的代码无法连接到服务器(BluetoothGattCallback 方法 onConnectionStateChange 提供了臭名昭著的状态 113)。然后我尝试通过 Playstore 应用程序nrf connect进行连接,这也是不可能的。广告(也在我的代码中完成)虽然有效。客户端代码以及 nrf 连接扫描并检测我的广告。这就是我想要启动服务器的方式:
BluetoothManager mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mGattServer = mBluetoothManager.openGattServer(this, mGattServerCallback);
我之前定义了 gattservercallback,所以该行被执行,我得到一个不为 NULL 的 BluetoothGattServer 实例,正如我想要的那样,我什至可以毫无问题地添加一个服务:
btGattServer.addService(createService());
(createService 返回一个服务实例)
我真的很感激这方面的帮助!如果有人需要更多详细信息或更多代码(例如开始广告的代码),我很乐意更新我的问题!
解决方案
我自己想通了:
要开始广告,您需要在 Advertiser 实例上调用 startAdvertising。此调用需要三个参数,其中一个是 AdvertiseSettings 对象。当我使用 AdvertiseSettings 构建器创建此对象时,我没有包含.setConnectable(true)
.
这就是为什么广告本身有效,但尝试连接的应用程序却无效的原因。(所以.openGattServer
实际上打开了一个服务器,它只是无法连接)
推荐阅读
- python - 获取所有喜欢 django 帖子的用户名
- apache-flink - 使用 Flink SQL 向表中添加列的语法是什么
- azure - Azure DevOps 仪表板 - 使用报告内容安排电子邮件通知
- c# - C# 第一个 http 请求 (HttpClient/WebClient/WebRequest) 在某些站点上需要很长时间(60+ 秒)?
- java - 如果在 scala 中发现重复,则删除两个对象
- python - 从给定坐标扭曲图像 - OpenCV Python
- rust - 在 String.split 之后使用链生锈
- accessibility - SPA 的谷歌灯塔
- linux - 尝试从 Github 安装文件时无法在 debian 上创建目录
- html - 重新定位响应内容