ios - 检测 Apple Pencil 是否连接到 iPad Pro

标签 ios objective-c swift

是否有 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/

相关文章:

ios - OAuth2 登录 SoundCloud 最近返回 Error Domain=NXOAuth2HTTPErrorDomain Code=401 "HTTP Error: 401"

ios - 自定义 UIDynamicBehavior : how do I know the total number of animation steps/ticks?

ios - 如何在不暴露私有(private)函数的情况下在单元测试中操作核心数据?

ios - 检测 UITableView 部分标题何时捕捉到屏幕顶部

iphone - 如何在代码中获取个人热点的IP地址或其他信息

ios - MDM 服务器设置

ios - 读取数组元素的预期方法在 'id<ProtocolName>' 类型的对象上找不到

ios - 向 Firebase 节点添加一个值而不是覆盖已经存在的值

ios - UIVIew 在 UIScrollView 滚动时调整大小

ios - 无法解码 Swift 中保存的信息