通过 iOS 8 Widget 断开蓝牙设备
Posted
技术标签:
【中文标题】通过 iOS 8 Widget 断开蓝牙设备【英文标题】:Disconnect Bluetooth device via iOS 8 Widget 【发布时间】:2014-09-27 00:55:55 【问题描述】:我正在开发一种低功耗蓝牙 (4.0) 设备,该设备可与 ios 应用程序配合使用并使用 CoreBluetooth。我已经成功创建了这个应用程序,它与设备交互得很好。但是,现在 iOS 8 允许开发人员实现自定义小部件,我想在 UINotification“今日”中心显示一个“断开连接”按钮。
问题是这样的:我相信我已经读过小部件和应用程序之间无法通信,这意味着小部件有自己的容器。这也意味着我无法访问应用程序中的蓝牙对象,该对象从小部件本身持有对我的蓝牙设备的引用以断开对象的连接。我能够在小部件类中创建一个新的蓝牙对象并从 iOS 系统检索蓝牙连接,但即使我此时断开了 BT 设备,它仍然会在应用程序内保存一个引用。
任何人都可以提供任何见解,想知道我正在尝试做的事情是可能的吗?
【问题讨论】:
小部件不仅有自己的容器,它还是一个完全独立的进程。 另一种选择是通过 BLE 连接与应用程序通信。 【参考方案1】:您可以使用shared NSUserDefaults
database 在您的应用和扩展程序之间传输数据。您可能还对NSUserDefaults
key value observing 感兴趣。
应用扩展旨在独立于其包含的应用,我不确定它们是否用于此目的。
但是,另一种选择是为包含应用程序实现 custom URL scheme,然后使用 openURL
打开包含应用程序并执行断开连接操作(或您希望扩展程序执行的任何其他操作) .
【讨论】:
感谢您的建议,非常感谢。看来您的自定义 URL 方案可能是要走的路。但是,我对您对 NSUserDefaults 键值观察的建议很感兴趣。由于小部件和应用程序本质上相互独立,这将如何工作?应用程序是否仍可以通过小部件收到这种通知?谢谢! @Teddy13 我真的不确定键值观察是否适用于蓝牙背景模式。但是,您当然可以在CoreBluetooth
委托方法实现中使用 NSUserDefaults
至少检查用户是否通过小部件“请求断开连接”。
@Teddy13 但你是对的 - 自定义 URL 方案可能是要走的路。在扩展程序和包含的应用程序之间进行任何类型的基于事件的通信没有一个很好的方法。
同意。非常感谢:)以上是关于通过 iOS 8 Widget 断开蓝牙设备的主要内容,如果未能解决你的问题,请参考以下文章