如何以编程方式获取 iPhone 中蓝牙的状态(开/关)
我试图以编程方式获取 iPhone/iPod 蓝牙的状态,无论它是打开还是关闭。 是否可以使用某些 Apple API 或第三方 API。
I trying to get the Status of iPhone/iPod Bluetooth that whether it is ON or OFF programmatically.
Is it possible using some Apple API or third party API.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
对 Sam 的回答进行了一些研究,我想我会分享
您可以在不使用私有 API 的情况下执行此操作,但有一些注意事项:
支持蓝牙 LE 规范(iPhone 4S+、第 5 代 iPod+、iPad
第三代+)
简单地分配该类将导致您的应用程序向用户请求使用蓝牙堆栈的权限(可能不需要),如果他们拒绝,您将看到的唯一内容是 CBCentralManagerStateUnauthorizediOS7+ 修订版:现在可以防止上述删除线,请参阅下面的评论,其中指向 此答案,其中解释了您可以设置 CoreBluetooth将 CBCentralManagerOptionShowPowerAlertKey 选项设置为 NO 以防止权限提示。话虽如此,此方法似乎确实提供了蓝牙堆栈状态的实时更新。
包含 CoreBluetooth 框架后,
这些测试很容易使用以下方法执行:
A little bit of research into Sam's answer that I thought I'd share
You can do so without utilizing private API, but with a few caveats:
support the bluetooth LE spec (iPhone 4S+, 5th Generation iPod+, iPad
3rd Generation+)
Simply allocating the class will cause your application to ask permission to use the bluetooth stack from the user (may not be desired), and if they refuse, the only thing you'll see is CBCentralManagerStateUnauthorizediOS7+ Revision: Aforementioned strike-through can now be prevented, see comments below which point to this answer which explains you can set CoreBluetooth'sCBCentralManagerOptionShowPowerAlertKey
option to NO to prevent permissions prompt.That being said, this method does seem to provide real time updates of bluetooth stack state.
After including the CoreBluetooth framework,
These tests were easy to perform using:
要禁用默认警报消息,您只需要在实例化 CBPeripheralManager 时传递选项字典:
在 iOS8+ 上测试的 SWIFT
显然,您还需要实现 CKManagerDelegate 委托方法 PeripheralManagerDidUpdateState,如上所述:
To disable the default alert message you just need to pass through an option dictionary when you instantiate the CBPeripheralManager:
SWIFT tested on iOS8+
Obviously you also need to implement the CKManagerDelegate delegate method peripheralManagerDidUpdateState as outlined above as well:
这个答案已经从原来的 Objective-C 更新到了 Swift 4.0。
假设您已经创建了蓝牙管理器并将委托分配给
ViewController
类。This answer has been updated from the original Objective-C to Swift 4.0.
It is assumed that you have already created a bluetooth manager and assigned the delegate to the
ViewController
class.BadPirate 答案的一些更新,在 iOS7 中,您可以设置中央管理器在分配管理器对象时不显示警报,方法是将键“CBCentralManagerOptionShowPowerAlertKey”设置为 0 的 NSDictionary。
Some updates on BadPirate's answer, with iOS7 you can set the central manager not to show the alert when allocating the manager object by giving it a NSDictionary that has key "CBCentralManagerOptionShowPowerAlertKey" set to 0.
在 iOS 5 及更高版本上有一种使用 CoreBluetooth 的方法。您可以使用的类是 CBCentralManager。它有一个属性“状态”,您可以检查蓝牙是否打开。 (枚举 CBCentralManagerState 具有您要检查的值)。
There is a way on iOS 5 and above using CoreBluetooth. The class you can use is CBCentralManager. It has a property 'state' that you can check to see if Bluetooth is on or not. (the enum CBCentralManagerState has the value(s) you want to check against).
一旦您完成了 CBCentralManager 设置,您就可以从 委托方法或直接委托方法。
Once you have the
CBCentralManager
setup you can useCBCentralManager::state
andCBCentralManager::authorization
either from a delegate method or directly.这个解决方案有点老了,在苹果推出核心蓝牙之前
This solution is bit old , before apple introducing core bluetooth