是否有 API 可以让您确定 Apple Pencil 是否已连接到 iPad Pro?查看 9.1 SDK,我看不到任何直接执行此操作的内容。或者也许这可以使用蓝牙 API 来完成。
最佳答案
我找不到关于 Apple Pencil 蓝牙的任何实际文档 实现(我不相信任何存在),但以下代码有效 为我™。
它会检查宣称自己支持 “设备信息”服务,然后如果其中任何一个名称为“Apple 铅笔”。
铅笔检测器.h
@import CoreBluetooth
@interface PencilDetector : NSObject <CBCentralManagerDelegate>
- (instancetype)init;
@end
铅笔检测器.m
#include "PencilDetector.h"
@interface PencilDetector ()
@end
@implementation PencilDetector
{
CBCentralManager* m_centralManager;
}
- (instancetype)init
{
self = [super init];
if (self != nil) {
// Save a reference to the central manager. Without doing this, we never get
// the call to centralManagerDidUpdateState method.
m_centralManager = [[CBCentralManager alloc] initWithDelegate:self
queue:nil
options:nil];
}
return self;
}
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
if ([central state] == CBCentralManagerStatePoweredOn)
{
// Device information UUID
NSArray* myArray = [NSArray arrayWithObject:[CBUUID UUIDWithString:@"180A"]];
NSArray* peripherals =
[m_centralManager retrieveConnectedPeripheralsWithServices:myArray];
for (CBPeripheral* peripheral in peripherals)
{
if ([[peripheral name] isEqualToString:@"Apple Pencil"])
{
// The Apple pencil is connected
}
}
}
}
@end
在实践中,以下更简单的同步代码不会等待
在检查连接的设备之前要打开中央管理器
在我的测试中似乎同样有效。但是,文档指出您不应该
调用管理器上的任何方法,直到状态更新为
CBCentralManagerStatePoweredOn
,因此较长的代码可能更安全。
任何你喜欢的地方
m_centralManager = [[CBCentralManager alloc] initWithDelegate:nil
queue:nil
options:nil];
// Device information UUID
NSArray* myArray = [NSArray arrayWithObject:[CBUUID UUIDWithString:@"180A"]];
NSArray* peripherals =
[m_centralManager retrieveConnectedPeripheralsWithServices:myArray];
for (CBPeripheral* peripheral in peripherals)
{
if ([[peripheral name] isEqualToString:@"Apple Pencil"])
{
// The Apple pencil is connected
}
}
关于ios - 检测 Apple Pencil 是否连接到 iPad Pro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32542250/