扫描蓝牙设备一旦出现uicontroller

时间:2016-06-13 16:39:18

标签: ios swift bluetooth

我是编程新手,我可能无法使用正确的术语来描述。

我正在编写一个应用程序,一旦它出现在屏幕上,我想要它。它会自动扫描设备5秒钟并放在桌面视图上以显示详细信息。

我还写了一个动作方法来响应UIBarButtonItem的重载。 动作方法工作正常。它放置设备'关于细胞的信息。

所以,我把这个动作方法放到viewDidLoad块中,以便在加载视图后扫描蓝牙设备。  但它不起作用。但我知道控制器弹出时,动作方法正在运行。但它没有显示有关细胞的任何信息。我需要按重新加载来扫描并列出单元格。

override func viewDidLoad() {
    super.viewDidLoad()

    btCentralManager = CBCentralManager(delegate: self, queue: nil)
    btCentralManager.delegate = self

    actionScan(navigationItem.rightBarButtonItem!)
}

重新加载按钮:

@IBAction func actionScan(sender: UIBarButtonItem) { // works fine.
    sender.enabled = false
    navigationItem.title = "Scanning..."
    btConnectable.removeAll()
    btPeripherals.removeAll()
    btRSSIs.removeAll()
    NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: #selector(ScanTableViewController.stopScan), userInfo: nil, repeats: false)
    btCentralManager.scanForPeripheralsWithServices(nil, options: nil)
}

控制器弹出后,如何在桌面上扫描并列出?

感谢。

1 个答案:

答案 0 :(得分:2)

尝试添加CBCentralManagerDelegate方法:

func centralManagerDidUpdateState(central: CBCentralManager) {
        if central.state == CBCentralManagerState.PoweredOn {
            startScan()
        }
}

并添加如下方法:

func startScan() {
        self.timer?.invalidate()
        self.centralManager?.scanForPeripheralsWithServices(nil, options: nil)
        self.timer = NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: "stopScan", userInfo: nil, repeats: false)
    }

    func stopScan() {
        self.centralManager?.stopScan()
    }

如果要在屏幕上每次出现视图控制器时运行任何方法 - 请从viewWillAppear或viewDidAppear调用这些方法。 加载视图控制器时,viewDidLoad只被调用一次。