我在Xcode中遇到蓝牙问题.我找不到一个很好的解决方案,如何检查蓝牙是否打开.我想要那个.我在网上搜索了一些解决方案,但没有什么对我有用.有关如何检查蓝牙的任何想法?我导入了CoreBluetooth类,我编写了这行代码:
if CBPeripheralManager.authorizationStatus() == .denied { code }
if CBPeripheralManager.authorizationStatus() == .authorized  { code }
新款iPhone 4S支持蓝牙4.0低功耗设备.是否有用于在iOS中与这些设备通信的API?
我正在尝试连接蓝牙BTLE设备.我发现外设没有问题.
但是,当我尝试连接到外围设备时,我收到了以下警告.
2013-04-05 22:10:36.110 CoreBluetooth [警告] 7DA9E322-D710-081B-4A9D-526DE546B13C,名称="Find My Car Smarter",IsConnected = NO>在连接时被解除分类
此外,没有相关的委托方法被调用:
didConnectPeripheral:
didFailToConnectPeripheral:
几个小时我一直在努力...请帮助.
我试图通过蓝牙4.0 LE将一个.png图像文件从一个iOS设备发送到另一个.
我能够像字符串一样简单的数据,但无法成功发送和利用图像文件.
在外围设备中,我从这开始
pictureBeforeData = [UIImage imageNamed:@"myImage.png"];
NSData *myData = UIImagePNGRepresentation(pictureBeforeData);
然后我创造myData了一个特征的价值.
_myCharacteristic =
[[CBMutableCharacteristic alloc] initWithType:_myCharacteristicUUID
                                   properties:CBCharacteristicPropertyRead
                                        value:myData
                                  permissions:CBAttributePermissionsReadable];
在中央设备中,我会在更新特征值时使用此功能
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error {
  if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:_myCharacteristicUUID]]) {
    NSLog(@"PICTURE CHARACTERISTIC FOUND"); // This successfully gets logged
    NSData *dataFromCharacteristic = [[NSData alloc] initWithData:characteristic.value];
    UIImage *imageFromData = [[UIImage alloc]initWithData:dataFromCharacteristic];
    // This correctly logs the size of my image
    NSLog(@"SIZE: %f, %f", imageFromData.size.height, imageFromData.size.width);
    // This causes the imageView to turn completely black
    _sentPictureImageView.image …我想要的是我的iOS设备一直在宣传蓝牙LE服务,即使应用程序没有运行,这样我就可以对其进行另一次iOS设备扫描并找到它.我在这里遵循Apple的背景说明:
我可以让它在前台做广告,有时在后台做广告,但它不会一直保持广告.如果您将其设置为在后台运行,即使设备重启后它也不应该开始做广告,就像后台位置服务在重启后自动开始工作一样?他们在Apple的文档中没有列出(或很难找到)的后台限制吗?有没有人在后台正确地拥有Core Bluetooth Peripheral广告的例子?
谢谢...
bluetooth objective-c core-bluetooth bluetooth-lowenergy ios7
即使它没有运行,我也试图让核心蓝牙唤醒应用程序.
正如Apple所说,"因为状态保存和恢复是内置于Core Bluetooth,您的应用程序可以选择使用此功能来要求系统保留应用程序的中央和外围管理器的状态,并继续执行某些与蓝牙相关的任务.代表他们,即使你的应用程序不再运行.当其中一个任务完成后,系统会将你的应用程序重新启动到后台,并让你的应用程序有机会恢复其状态并适当地处理事件."
我添加了以下代码以选择加入此功能:
 myCentralManager =
        [[CBCentralManager alloc] initWithDelegate:self queue:nil
         options:@{ CBCentralManagerOptionRestoreIdentifierKey:
         @"myCentralManagerIdentifier" }];
但应用程序醒来时的回调从未被触发.
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
-(void)centralManager:(CBCentralManager *)central
      willRestoreState:(NSDictionary *)state {
}
这两个从未被称为.
我正在测试这个唤醒功能的方式:
我在info.plist中的后台模式中添加了"bluetooth central",因此BLE在后台运行.
在我的iphone No.1中启动centralManager.开始扫描.
按下主页然后退出,玩一些内存沉重的游戏,在调试日志中我会看到:"因内存压力而终止.进程已完成退出代码0".这是为了模拟ios系统如何因内存压力而终止后台应用程序.
与另一部iphone No.2开始一个灯塔并开始广播.
结果:那些重新启动的回调永远不会被调用.
任何想法为什么这不起作用?如果这是一个API问题,当你的手机接近BLE信标时,还有其他方法可以将你的应用重新启动到BLE的后台吗?我已经尝试使用ibeacon唤醒应用程序,但核心蓝牙中央管理器将不允许您在后台连接到ibeacon.
谢谢!
ios core-bluetooth bluetooth-lowenergy cbcentralmanager state-restoration
ACL =异步连接.SCO =面向同步连接.
SCO是仅一个主设备和仅一个从设备之间的点对点连接.
ACL是一个主站和多个从站之间的多点连接.
还有什么区别?
当我尝试使用我的iphone应用程序连接蓝牙LE时.它使CoreBluetooth [ERROR] XPC连接中断,重置.为什么.?
关于这个问题,
连接到外围设备后,我可以检索它CFUUIDRef,它是唯一的,可以用它来重新连接retrievePeripherals.但是,我发现在关闭应用程序后我无法使用它重新连接.
UUID连接后生成的唯一值是否仅在应用程序的生命周期内有效,或者我们是否应该将其保存以供以后使用?我试图让我的应用程序记住一个特定的外围设备,但此外peripheral.UUID,我不知道任何其他唯一标识符.
core-bluetooth ×10
ios ×6
bluetooth ×4
objective-c ×3
cbperipheral ×1
ios5 ×1
ios6 ×1
ios7 ×1
iphone ×1
iphone-5 ×1
swift ×1
xcode ×1
xcode5 ×1