Tag: 蓝牙

使用CoreBluetooth读取长的特征值

我有一个包含图像数据的特征值。 在外设我设置这样的值: _photoUUID = [CBUUID UUIDWithString:bPhotoCharacteristicUUID]; _photoCharacteristic = [[CBMutableCharacteristic alloc] initWithType:_photoUUID properties:CBCharacteristicPropertyRead value:Nil permissions:CBAttributePermissionsReadable]; 我的理解是,当这个值被请求,didRecieveRequestcallback将被称为: -(void) peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request { if ([request.characteristic.UUID isEqual:_photoUUID]) { if (request.offset > request.characteristic.value.length) { [_peripheralManager respondToRequest:request withResult:CBATTErrorInvalidOffset]; return; } else { // Get the photos if (request.offset == 0) { _photoData = [NSKeyedArchiver archivedDataWithRootObject:_myProfile.photosImmutable]; } request.value = [_photoData subdataWithRange:NSMakeRange(request.offset, […]

在后台运行iPhone作为iBeacon

是否可以将iOS 7设备作为蓝牙LE外设(iBeacon)运行并在后台投放广告? 我已经能够在下面的代码在前台广告,可以从另一个iOS设备看到它,但只要我回到主屏幕停止广告。 我在plist中添加了蓝牙外设的后台模式,但似乎没有帮助,虽然我得到提示说设备要在后台使用蓝牙。 我做错了什么,或者这只是不可能在iOS 7? peripManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil]; – (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral { if (peripheral.state != CBPeripheralManagerStatePoweredOn) { return; } NSString *identifier = @"MyBeacon"; //Construct the region CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:identifier]; //Passing nil will use the device default power NSDictionary *payload = [beaconRegion peripheralDataWithMeasuredPower:nil]; //Start advertising [peripManager startAdvertising:payload]; } […]

获取蓝牙低功耗外设的MAC地址

我目前正在开发基于蓝牙低功耗设备的iOS应用程序。 为了获得唯一的标识符来比较获得的外设,我必须得到外设的MAC地址。 据观察,外围设备的UUID属性在iOS设备之间有所不同,并且为了获得UUID,外围设备也必须至less连接到主设备一次。 由于我不得不处理登机手续,我不想build立连接。 当我通过蓝牙服务门户网站时,发现设备信息本身就是一项服务,除非主iOS设备和外设蓝牙低功耗设备之间已build立连接,否则无法检索到该服务。 我发现在Android中我们获取设备的全部信息,包括其MAC地址(使用getAddress()),当我们从设备获取自己的响应时。 我没有发现与设备地址相关的CBPeripheral类中的任何属性。 获得唯一参数的另一种方法是定制广告数据以发送关于设备的附加信息,这在固件方面需要更多的工作。 那么在iOS中有什么办法可以在不build立连接的情况下获得蓝牙低功耗外设的MAC地址? 任何帮助将不胜感激。

核心蓝牙广告并在后台扫描

我一直在试图设置一个应用程序,使设备都扫描外设和广告作为外设。 目标是当两台设备通过蓝牙发现相互靠近时在后台被唤醒。 从Apple文档看来,您应该能够在后台运行BLE(启用蓝牙 – 中央和蓝牙外设后台模式),而且我的应用程序在一台设备处于前台时工作。 首先,我宣传这样的数据: NSDictionary *advertisingData = @{CBAdvertisementDataLocalNameKey:@"my-peripheral", CBAdvertisementDataServiceUUIDsKey:@[[CBUUID UUIDWithString:identifier]]}; // Start advertising over BLE [peripheralManager startAdvertising:advertisingData]; 然后我设置设备扫描数据: NSArray *services = @[[CBUUID UUIDWithString:identifier]]; [centralManager scanForPeripheralsWithServices:services options:nil]; 但是,当两者都进入后台(设备必须被locking),蓝牙无法发现和 – (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 永远不会被任何设备调用。 我怎样才能解决这个问题? 谢谢

SWIFT – BLE通信

我有一个SWIFT应用程序,需要通过Bluetooth LowEnergy模块向我的Arduino发送一个值! 我做了正确的search和连接部分,但我无法发送和接收任何数据。 这里是我的代码来获得可用的BLE设备的列表,并把所有这些放在一个表格视图中,然后单击应用程序提供的单元格以将它们连接到它们! 所有这一切都完美的作品,但我不知道从应用程序发送一个“a”字符到BLE,并从arduino回到应用程序的答案! import UIKit import CoreBluetooth class BluetoothList: UITableViewController,CBCentralManagerDelegate, CBPeripheralDelegate { var listValue = [Lista]() var Blue: CBCentralManager! var conn: CBPeripheral! var a: String! var char: CBCharacteristic! func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) { if (peripheral.name == a){ self.conn = peripheral self.conn.delegate = self Blue.stopScan() Blue.connectPeripheral(self.conn, […]

有没有办法在iOS中以编程方式打开和closures蓝牙和/或WiFi?

我正在寻找一种简单的方法来在iOS 4.x设备(iPhone和iPad)上打开和closures状态之间切换蓝牙和WiFi。 当我在不同的位置和使用场景之间移动时,我不断地切换这些function,现在需要多次点击并访问设置应用程序。 我正在寻找创build一个简单的应用程序,在Springboard上生活,我可以点击,它将closuresWiFi,如果打开,反之亦然,然后立即退出。 与用于切换蓝牙状态的应用程序类似。 我有开发人员的SDK,并且在Xcode和iOS开发中很舒服,所以很高兴编写所需的代码来创build应用程序。 我只是不知道哪些API,私有或者不具有所需的function来简单地切换这些设施的状态。 因为这是一个非常个人的痒,我没有试图出售应用程序或在应用程序商店得到它,所以符合应用程序的API使用指南是没有问题的。 我不想做的是越狱的设备,因为我想保持核心软件出货。 任何人都可以通过一些示例代码或者关于实现这个目标的更多信息来指向我,因为我的Google-fu让我失望了,如果4.x设备的信息已经存在,我就找不到它了。

iBeacon:didRangeBeacons停止呼叫,必须重置设备才能重新工作

我正在使用自定义的BeaconManager委托,以便信标测距不是由视图控制器的生命周期决定的。 一切都很好,但是每隔一段时间(1-2天),指示灯就会停止工作,而且Range信道也不会被叫到。 解决这个问题的唯一方法就是重置我的iPhone,一旦我这样做,它就可以完美的工作。 以下是我正在使用的代码。 基本的stream程是,当我的ViewController调用ViewDidLoad它发送一个通知回到AppDelegate告诉它开始测距信标,我从来没有告诉它停止,因为我希望它继续范围的信标无论用户导航在应用程序中。 我想知道如果我的代码是造成这个,或者这只是一个蓝牙的错误。 谢谢你的帮助! BeaconManager.m #import "BeaconManager.h" #import "AppDelegate.h" @interface BeaconManager()<CLLocationManagerDelegate> @property (nonatomic, strong) CLLocationManager *locationManager; @property (nonatomic, strong) CLBeaconRegion *beaconRegion; @end @implementation BeaconManager + (id)sharedManager { static BeaconManager *sharedBeaconManager = nil; static dispatch_once_t once; dispatch_once(&once, ^{ sharedBeaconManager = [[self alloc] init]; }); return sharedBeaconManager; } – (id)init { self = [super […]

如何在iphone中获得蓝牙(开/关)的状态

我试图以编程方式获取iPhone / iPod蓝牙的状态,无论它是打开还是closures。 是否有可能使用一些苹果API或第三方API。