Ios 核心蓝牙框架不扫描所有BLE设备和apple BLE设备

Ios 核心蓝牙框架不扫描所有BLE设备和apple BLE设备,ios,swift,core-bluetooth,Ios,Swift,Core Bluetooth,我使用的是核心蓝牙框架,扫描的设备很少,比如micromax A250、micromax A116、三星grand neo、HTC 610和ipod 5s,但我无法扫描三星、HTC和ipod,原因可能是什么?请帮我提前解决谢谢 代码 // object creation @IBAction func btnScanClicked(sender:UIButton) { var centralManager:CBCentralManager = CBCentralMa

我使用的是核心蓝牙框架,扫描的设备很少,比如micromax A250、micromax A116、三星grand neo、HTC 610和ipod 5s,但我无法扫描三星、HTC和ipod,原因可能是什么?请帮我提前解决谢谢

代码

// object creation



@IBAction func btnScanClicked(sender:UIButton)
    {

        var centralManager:CBCentralManager = CBCentralManager(delegate: self, queue: nil)
        self.centralManager = centralManager
    }

 //   method called whenever the device state changes.

func centralManagerDidUpdateState(central: CBCentralManager!) {

        if central.state == CBCentralManagerState.PoweredOff
        {
            println("bluetooth is off")
        }
        else if central.state == CBCentralManagerState.PoweredOn
        {
            central.scanForPeripheralsWithServices(nil, options: nil) // scanning devices
            println("bluetooth is on")

        }
        else if central.state == CBCentralManagerState.Unknown
        {
            println("bluetooth is unknown")
        }
        else if central.state == CBCentralManagerState.Unsupported
        {
            println("bluetooth is unsupported")
        }
    }

// method to discover peripherals:- 

func centralManager(central: CBCentralManager!, didDiscoverPeripheral peripheral: CBPeripheral!, advertisementData: [NSObject : AnyObject]!, RSSI: NSNumber!)

    {
        if peripheral != nil{
                println("discovered \(peripheral.name)")
        }
        else
        {
            println("No device found")
        }
        self.peripheral = peripheral
        peripheral.delegate = self
        central!.connectPeripheral(peripheral, options: nil)
    }

// method to connect:-

func centralManager(central: CBCentralManager!, didConnectPeripheral peripheral: CBPeripheral!)

    {
        peripheral.delegate = self
        peripheral.discoverServices(nil)
        if ((peripheral) != nil)
        {
            var state = peripheral.state == CBPeripheralState.Connected ? "yes" : "no"
            connected = "Connected \(state)"
            println("connected \(connected)")
        }
    }

Android操作系统不支持将手机用作外设,只支持将其用作主机


除非运行相关软件,否则iPhone不会表现为外设。您可以在苹果的开发者门户网站上提供的BTLE_Transfer示例应用程序中找到iOS设备作为外围设备进行广告的示例代码。

您知道这些设备是为可扩展服务做广告的吗?你试过app store中的LightBlue应用吗?这些设备都是bluetooth 4.0版,所以一定是BLE设备,我没有试过LightBlue应用,我不知道这是什么。仅仅因为这些设备是BT 4.0并不意味着它们是积极的广告服务。从表面上看,你的代码看起来不错,它正在查找一些设备,所以这就是为什么最好使用另一个应用程序进行检查。LightBlue应用程序是免费的,将显示可移动设备的广告-这不是一个解决方案,只是一个建议的故障排除工具。您需要确认这些设备确实在宣传一项可扩展的服务。一个已知的工作应用程序是一个很好的方法,它可以改写@Paulw11:一个可发现的设备需要做广告才能“被发现”。换句话说,BLE设备会说“嘿,我在这里”,并且BLE设备扫描将能够找到它。但是如果第一个没有说“嘿,我在这儿”,第二个就找不到了。“正确”扫描的LightBlue也可能会发布广告。通过这种方式,您可以检查您的问题是否是因为扫描(有选项),或者是因为其他设备没有广告。如果我使用硬件与iphone通信,那么在硬件中,我还需要运行软件,在该软件的帮助下,我可以通过蓝牙连接这两个设备?我不完全理解您的问题。我对android Bluetooth 4.0协议栈的有限理解是,它们不支持将手机变成外设所需的协议位,因为“外设”是在iOS CoreBluetooth上下文中定义的。有解决办法吗?我不知道。我认为使用备用协议栈是可能的,但我不知道这在实际意义上意味着什么。我的安卓知识有限。