我很难获得核心蓝牙来发现iOS 8上的外围设备。在iOS 7设备上,同样的代码也能正常工作。最初,我认为这将是一个权限问题,因为我一直在做一些iBeacon工作,iOS 8上的核心位置权限也有一些变化,但是我在网上找不到任何有帮助的地方。下面是一个示例项目的链接,它对我来说在iOS 7上运行得很好,但在iOS 8上就不行了:
https://github.com/elgreco84/PeripheralScanning
如果我在iOS 7设备上运行这个项目,它将记录我周围许多设备的广告数据。在iOS 8上,我看到的唯一输出就是中央管理器状态是“接通”的。
发布于 2014-08-30 21:45:21
在你处于“开机”状态之前,开始扫描外围设备是无效的。也许在您的iOS7设备上您是幸运的时间,但代码仍然是不正确的。你的centralManagerDidUpdateState:
应该是
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
switch (central.state)
{
case CBCentralManagerStateUnsupported:
{
NSLog(@"State: Unsupported");
} break;
case CBCentralManagerStateUnauthorized:
{
NSLog(@"State: Unauthorized");
} break;
case CBCentralManagerStatePoweredOff:
{
NSLog(@"State: Powered Off");
} break;
case CBCentralManagerStatePoweredOn:
{
NSLog(@"State: Powered On");
[self.manager scanForPeripheralsWithServices:nil options:nil];
} break;
case CBCentralManagerStateUnknown:
{
NSLog(@"State: Unknown");
} break;
default:
{
}
}
}
并从scanForPeripheralsWithServices
中删除对didFinishLaunchingWithOptions
的调用。
发布于 2015-04-03 19:21:23
在构建一个非常基本的BLE扫描仪应用程序时,我遇到了同样的问题。添加了所需的方法"centralManagerDidUpdateState“。但什么都没起作用。
我相信这个问题与queue
有关。将CBCentralManager
实例放入dispatch_get_main_queue
中
这个代码片段可以做到这一点:
// BLE Stuff
let myCentralManager = CBCentralManager()
// Put CentralManager in the main queue
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
myCentralManager = CBCentralManager(delegate: self, queue: dispatch_get_main_queue())
}
使用默认的单一视图xCode启动应用程序。您可以将其放入ViewController.swift文件中:
import UIKit
import CoreBluetooth
class ViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate {
// BLE Stuff
let myCentralManager = CBCentralManager()
var peripheralArray = [CBPeripheral]() // create now empty array.
// Put CentralManager in the main queue
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
myCentralManager = CBCentralManager(delegate: self, queue: dispatch_get_main_queue())
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// Mark CBCentralManager Methods
func centralManagerDidUpdateState(central: CBCentralManager!) {
updateStatusLabel("centralManagerDidUpdateState")
switch central.state{
case .PoweredOn:
updateStatusLabel("poweredOn")
case .PoweredOff:
updateStatusLabel("Central State PoweredOFF")
case .Resetting:
updateStatusLabel("Central State Resetting")
case .Unauthorized:
updateStatusLabel("Central State Unauthorized")
case .Unknown:
updateStatusLabel("Central State Unknown")
case .Unsupported:
println("Central State Unsupported")
default:
println("Central State None Of The Above")
}
}
func centralManager(central: CBCentralManager!, didDiscoverPeripheral peripheral: CBPeripheral!, advertisementData: [NSObject : AnyObject]!, RSSI: NSNumber!) {
println("Did Discover Peripheral")
}
}
https://stackoverflow.com/questions/25586527
复制相似问题