【问题标题】:Clearing CoreBluetooth GATT cache without removing bond清除 CoreBluetooth GATT 缓存而不删除绑定
【发布时间】:2014-06-26 07:44:49
【问题描述】:

我有一个 iOS 应用程序作为外围设备和一个 OS X 应用程序作为中心,使用 CoreBluetooth 框架。 OS X 应用程序连接到 iOS 应用程序,它们通过读取加密特征并输入随机代码来结合。一切正常,直到 iOS 应用程序重新启动。从那时起,每次我连接到 iOS 设备并尝试读取其任何特征时,它都会返回“句柄无效”-错误。解决此问题的唯一方法是从 OS X 的蓝牙首选项中删除设备并重新启动绑定过程。

我怀疑这个问题是由 OS X 对我设备的服务和特性的缓存引起的,因为当我使用两台 iOS 设备在重启后相互连接时没有出现该问题。

我正在寻找一种方法来清除我的服务和特征的 OS X 缓存。我熟悉删除com.apple.Bluetooth.plist并重新启动blued进程/打开/关闭蓝牙的方法。 (Does blued cache ATT values, and how to clear the cache?How can I clear the CoreBluetooth cache on MacOS?

但是,删除 com.apple.Bluetooth.plist 需要我再次绑定 iOS 设备并输入代码。有什么方法可以清除缓存,但只能使用与我的应用相关的服务/特征?

【问题讨论】:

  • 基本问题,但让我们从这里开始:连接成功后你会重新发现一切吗?
  • @allprog 是的,我重新发现了我的应用所需的服务和特性。

标签: macos caching bluetooth core-bluetooth iobluetooth


【解决方案1】:

事实证明这比我想象的要容易。在 com.apple.Bluetooth.plist 中,有一个 CoreBluetoothCache 键,其中包含一个包含一些缓存服务和内容的字典。棘手的部分是编辑缓存而不用蓝写。无论如何,这是要走的路(在终端):

sudo defaults write /Library/Preferences/com.apple.Bluetooth CoreBluetoothCache -dict
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.blued.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.blued.plist

在此之后,CoreBluetooth 实际上会重新发现服务并以正确的方式读取特征。

【讨论】:

  • 致未来的读者:这不会断开蓝牙鼠标或键盘,所以不用担心。
猜你喜欢
  • 2013-12-31
  • 2011-01-03
  • 2012-11-12
  • 2015-11-26
  • 2016-03-15
  • 1970-01-01
  • 2015-12-19
  • 2017-01-30
  • 2014-02-04
相关资源
最近更新 更多