iOS 自定义键盘扩展蓝牙访问

问题描述

我想从 Custom Keyboard Extension 中访问蓝牙设备。 但是,CBCentralManager 将始终处于 .unsupported 状态。我在 RequestsOpenAccess 中启用了 info.plist > NSExtension

有没有其他人遇到过同样的问题?

我的代码如下。它基于 Apple 的Custom Keyboard Extension 目标代码

class KeyboardViewController: UIInputViewController {
    @IBOutlet var nextKeyboardButton: UIButton!
    internal var manager: BLManager?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Perform custom UI setup here
        self.nextKeyboardButton = UIButton(type: .system)
        self.nextKeyboardButton.setTitle(NSLocalizedString("Next Keyboard",comment: "Title for 'Next Keyboard' button"),for: [])
        self.nextKeyboardButton.sizetoFit()
        self.nextKeyboardButton.translatesAutoresizingMaskIntoConstraints = false
        self.nextKeyboardButton.addTarget(self,action: #selector(handleInputModeList(from:with:)),for: .allTouchEvents)
        self.view.addSubview(self.nextKeyboardButton)
        self.nextKeyboardButton.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
        self.nextKeyboardButton.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("> BL - Keyboard")
        manager = BLManager.shared
    }
    
    override func viewWillLayoutSubviews() {
        self.nextKeyboardButton.isHidden = !self.needsInputModeSwitchKey
        super.viewWillLayoutSubviews()
    }
}

带有相应的 BLManager 对象。

internal class BLManager: NSObject,CBCentralManagerDelegate {
    public static var shared: BLManager = BLManager()
    public var manager: CBCentralManager
    
    override init() {
        manager = CBCentralManager(delegate: nil,queue: nil)
        super.init()
        manager.delegate = self
    }
    
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        if central.state == .poweredOn {
            manager.scanForperipherals(withServices: nil,options: nil)
        }
        print("> BL \(central.state)")
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)