gpt4 book ai didi

ios - didUpdateValueForCharacteristic(setNotifyValue:YES)不起作用

转载 作者:行者123 更新时间:2023-12-01 17:53:32 25 4
gpt4 key购买 nike

我想在值更改时收到通知。我正在关注本教程-> Introduction to Core Bluetooth: Building a Heart Rate Monitor

我使用此蓝牙设备-> IC card Reader (Sony product)

- (void)viewDidLoad {
[super viewDidLoad];
_myCentralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[_myCentralManager scanForPeripheralsWithServices:nil options:nil];
self.myCentralManager = _myCentralManager;
}

#pragma mark - CBCentralManagerDelegate

// method called whenever you have successfully connected to the BLE peripheral
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
{
[peripheral setDelegate:self];
[peripheral discoverServices:nil];
NSString *connected = [NSString stringWithFormat:@"Connected: %@", peripheral.state == CBPeripheralStateConnected ? @"YES" : @"NO"];
NSLog(@"%@", connected);
}

// CBCentralManagerDelegate - This is called with the CBPeripheral class as its main input parameter. This contains most of the information there is to know about a BLE peripheral.
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{
NSLog(@"Discovered %@", _peripheral.name);
NSString *localName = [advertisementData objectForKey:CBAdvertisementDataLocalNameKey];

if ([localName length] > 0) {
NSLog(@"Found the : %@", localName);
// [self.myCentralManager stopScan];
self.peripheral = peripheral;
peripheral.delegate = self;
[self.myCentralManager connectPeripheral:peripheral options:nil];
}
}

// method called whenever the device state changes.
- (void)centralManagerDidUpdateState:(CBCentralManager *)central{
// Determine the state of the peripheral
if ([central state] == CBCentralManagerStatePoweredOff) {
NSLog(@"CoreBluetooth BLE hardware is powered off");
}
else if ([central state] == CBCentralManagerStatePoweredOn) {
NSLog(@"CoreBluetooth BLE hardware is powered on and ready");
}
else if ([central state] == CBCentralManagerStateUnauthorized) {
NSLog(@"CoreBluetooth BLE state is unauthorized");
}
else if ([central state] == CBCentralManagerStateUnknown) {
NSLog(@"CoreBluetooth BLE state is unknown");
}
else if ([central state] == CBCentralManagerStateUnsupported) {
NSLog(@"CoreBluetooth BLE hardware is unsupported on this platform");
}
}

- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
}

#pragma mark - CBPeripheralDelegate

// CBPeripheralDelegate - Invoked when you discover the peripheral's available services.
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error{
for (CBService *service in peripheral.services) {
NSLog(@"Discovered service: %@", service.UUID);
[peripheral discoverCharacteristics:nil forService:service];
}
}

// Invoked when you discover the characteristics of a specified service.
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{
// Deal with errors (if any)
if (error) {
NSLog(@"Error discovering characteristics: %@", [error localizedDescription]);
return;
}

// Again, we loop through the array, just in case.
for (CBCharacteristic *characteristic in service.characteristics) {

[peripheral setNotifyValue:YES forCharacteristic:characteristic];
}

for (CBCharacteristic *aChar in service.characteristics)
{
[_peripheral setNotifyValue:YES forCharacteristic:aChar];
NSLog(@"Found characteristic : %@ UUID : %@",aChar.value,aChar.UUID);
NSString *value = [[NSString alloc] initWithData:aChar.value encoding:NSUTF8StringEncoding];
NSLog(@"Value %@",value);
}
}

// Invoked when you retrieve a specified characteristic's value, or when the peripheral device notifies your app that the characteristic's value has changed.
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{
if (error) {
NSLog(@"Error reading characteristics: %@", [error localizedDescription]);
return;
}

if (characteristic.value != nil) {
//value here.
}

NSLog(@"Characteristic value : %@ with ID %@", characteristic.value, characteristic.UUID);
//[delegate characteristicValueRead:characteristic.value];
NSLog(@"Caaled characteristic: %@",characteristic.value);
[self getHeartBPMData:characteristic error:error];
// Add your constructed device information to your UITextView
}

控制台日志是:
> 2014-03-23 21:37:37.215 CBTutorial[2736:60b] CoreBluetooth[WARNING] <CBCentralManager: 0x1455dec0> is not powered on
2014-03-23 21:37:37.253 CBTutorial[2736:60b] CoreBluetooth BLE hardware is powered on and ready
2014-03-23 21:37:37.257 CBTutorial[2736:60b] Discovered (null)
2014-03-23 21:37:37.261 CBTutorial[2736:60b] Discovered (null)
2014-03-23 21:37:37.263 CBTutorial[2736:60b] Found the : PaSoRi
2014-03-23 21:37:37.493 CBTutorial[2736:60b] Connected: YES
2014-03-23 21:37:37.726 CBTutorial[2736:60b] Discovered service: Unknown (<233e8100 3a1b1c59 9bee1803 73dd03a1>)
2014-03-23 21:37:37.728 CBTutorial[2736:60b] Discovered service: Device Information
2014-03-23 21:37:37.732 CBTutorial[2736:60b] Found characteristic : <0000ffff ff0200fe d7131600> UUID : Unknown (<233e8101 3a1b1c59 9bee1803 73dd03a1>)
2014-03-23 21:37:37.733 CBTutorial[2736:60b] Value (null)
2014-03-23 21:37:37.735 CBTutorial[2736:60b] Found characteristic : <000000> UUID : Unknown (<233e8102 3a1b1c59 9bee1803 73dd03a1>)
2014-03-23 21:37:37.736 CBTutorial[2736:60b] Value
2014-03-23 21:37:37.738 CBTutorial[2736:60b] Found characteristic : <0000ff00 ff00> UUID : Unknown (<233e8103 3a1b1c59 9bee1803 73dd03a1>)
2014-03-23 21:37:37.739 CBTutorial[2736:60b] Value (null)
2014-03-23 21:37:37.742 CBTutorial[2736:60b] Found characteristic : <> UUID : Unknown (<233e8104 3a1b1c59 9bee1803 73dd03a1>)
2014-03-23 21:37:37.744 CBTutorial[2736:60b] Value
2014-03-23 21:37:37.746 CBTutorial[2736:60b] Found characteristic : <> UUID : Unknown (<233e8105 3a1b1c59 9bee1803 73dd03a1>)
2014-03-23 21:37:37.747 CBTutorial[2736:60b] Value
2014-03-23 21:37:37.749 CBTutorial[2736:60b] Found characteristic : <> UUID : Unknown (<233e8106 3a1b1c59 9bee1803 73dd03a1>)
2014-03-23 21:37:37.750 CBTutorial[2736:60b] Value
2014-03-23 21:37:37.752 CBTutorial[2736:60b] Found characteristic : <> UUID : Unknown (<233e8107 3a1b1c59 9bee1803 73dd03a1>)
2014-03-23 21:37:37.753 CBTutorial[2736:60b] Value
2014-03-23 21:37:37.756 CBTutorial[2736:60b] Found characteristic : <41697250 61536f52 69> UUID : Manufacturer Name String
2014-03-23 21:37:37.758 CBTutorial[2736:60b] Value AirPaSoRi
2014-03-23 21:37:37.760 CBTutorial[2736:60b] Found characteristic : <4d6f6465 6c4e756d 62657230 31> UUID : Model Number String
2014-03-23 21:37:37.762 CBTutorial[2736:60b] Value ModelNumber01
2014-03-23 21:37:37.764 CBTutorial[2736:60b] Found characteristic : <4669726d 77617265 3031> UUID : Firmware Revision String
2014-03-23 21:37:37.765 CBTutorial[2736:60b] Value Firmware01
2014-03-23 21:37:37.767 CBTutorial[2736:60b] Found characteristic : <536f6674 77617265 3031> UUID : Software Revision String
2014-03-23 21:37:37.768 CBTutorial[2736:60b] Value Software01

为什么我不能收到didUpdateValueForCharacteristic(Even setNotifyValue:YES)回调?
(我已经尝试过接触IC卡)请帮助我。

最佳答案

首先。

在您的代码中,您正在调用:

_myCentralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[_myCentralManager scanForPeripheralsWithServices:nil options:nil];

在viewDidLoad中。这是个错误。您应仅在 scanForPeripheralsWithServices:options:的情况下将 centralManagerDidUpdateState:称为 state == CBCentralManagerStatePoweredOn
第二个:

最好将发现的外围设备分配给保留的 CBPeripheralcentralManager: didConnectPeripheral:中,例如:
self.myPeripheral = peripheral;
self.myPeripheral.delegate = self;

第三
peripheral: didUpdateValueForCharacteristic: error:通过以下方式调用:
  • readValueForCharacteristic:
  • setNotifyValue: forCharacteristic

  • 为什么 readValueForCharacteristic:不调用 peripheral: didUpdateValueForCharacteristic: error:真的很奇怪,也许还有一些额外的问题。

    您可以尝试调用 setNotifyValue: forCharacteristic看看会发生什么吗?

    BTW,最好的CoreBluetooth教程是Apple Core Bluetooth Programming Guide

    关于ios - didUpdateValueForCharacteristic(setNotifyValue:YES)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22591352/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com