Ответ 1
Я не могу найти фактическую документацию на Apple Pencil Bluetooth (и я не считаю, что он существует), но следующий код работает для Me & trade;.
Он проверяет подключенные устройства, которые рекламируют себя как поддерживающие "Информация об устройстве", а затем, если у любого из них есть имя "Apple" Карандаш".
PencilDetector.h
@import CoreBluetooth
@interface PencilDetector : NSObject <CBCentralManagerDelegate>
- (instancetype)init;
@end
PencilDetector.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
}
}