ios - 在 iPad 和 iPhone 之间连接蓝牙
问题描述
我目前正在尝试使 2 个 iOS 设备相互连接,以便我可以在两者之间发送 gps 位置。现在我正在使用corebluetooth
来实现这一点。
到目前为止,我所做的是创建了 2 个单独的项目,一个是接收者,一个是发送者。我按照苹果本身的一些指示来播放 iPad。但是,尝试搜索蓝牙设备的项目似乎没有找到它。我在打开蓝牙的不同物理设备上运行这两个应用程序。在我使用过的代码下方(请记住,这是我编写的一些快速代码,试图看看我是否真的能找到该设备。)这也是我第一次使用蓝牙,所以这肯定是一个学习曲线。
仅供参考:我打算使用GATT protocol
. 我还想知道是否可以在没有配对握手的情况下以弹出窗口接受连接的方式完成。我希望接收器自动接收和广播信号并开始获取正在发送的数据,而无需额外的步骤。或者我需要这样的东西Multipeer Connectivity Framework
吗?
接收者
import UIKit
import CoreBluetooth
import CoreLocation
class ViewController: UIViewController {
private let uuidBeacon = "A26962FC-F9DD-4251-B339-A25B3E808213"
var peripheral: CBPeripheralManager!
var peripheralData: NSMutableDictionary!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
peripheral = CBPeripheralManager(delegate: self, queue: nil)
}
override func viewDidAppear(_ animated: Bool) {
guard let region = createBeaconRegion() else { return }
advertiseDevice(region: region)
}
private func createBeaconRegion() -> CLBeaconRegion? {
let proximityUUID = UUID(uuidString: uuidBeacon)
let major : CLBeaconMajorValue = 100
let minor : CLBeaconMinorValue = 1
let beaconID = "com.example.myDeviceRegion"
return CLBeaconRegion(proximityUUID: proximityUUID!,
major: major, minor: minor, identifier: beaconID)
}
func advertiseDevice(region : CLBeaconRegion) {
peripheralData = region.peripheralData(withMeasuredPower: nil)
}
}
extension ViewController: CBPeripheralManagerDelegate {
func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
switch peripheral.state {
case .poweredOn:
peripheral.startAdvertising(((peripheralData as NSDictionary) as! [String : Any]))
case .poweredOff:
break
// peripheral.stopAdvertising()
default:
break
}
}
}
广播公司
import UIKit
import CoreBluetooth
import CoreLocation
class ViewController: UIViewController {
var centralManager: CBCentralManager!
var sensorTag: CBPeripheral?
var keepScanning: Bool = false
private var timerScanInterval: TimeInterval = 5
override func viewDidLoad() {
super.viewDidLoad()
centralManager = CBCentralManager(delegate: self, queue: nil)
}
}
extension ViewController: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch central.state {
case .poweredOn:
keepScanning = true
_ = Timer(timeInterval: timerScanInterval, target: self, selector: #selector(pauseScan), userInfo: nil, repeats: false)
centralManager.scanForPeripherals(withServices: nil, options: nil)
break
case .poweredOff:
break
case .unsupported:
break
case .unauthorized:
break
case .resetting:
break
case .unknown:
break
}
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
peripheral.discoverServices(nil)
if let peripheralName = advertisementData[CBAdvertisementDataLocalNameKey] as? String {
print(peripheralName)
}
}
@objc private func pauseScan() {
centralManager.stopScan()
_ = Timer(timeInterval: 2, target: self, selector: #selector(resumeScan), userInfo: nil, repeats: false)
}
@objc private func resumeScan() {
if keepScanning {
centralManager.scanForPeripherals(withServices: nil, options: nil)
_ = Timer(timeInterval: timerScanInterval, target: self, selector: #selector(pauseScan), userInfo: nil, repeats: false)
}
}
}
extension ViewController: CBPeripheralDelegate {
}
解决方案
推荐阅读
- google-kubernetes-engine - 子域的 gke-security-groups
- matlab - 我将如何创建一个查找表,其中包含用于增加/减少给定数量的图像亮度的传递函数
- spring-boot - Keycloak门面服务
- c# - 会话未结束时停止页面刷新 ASP.NET MVC C#
- java - 在将 pdf 文件复制到另一个文件时添加注释
- angular - Angular 库如何使用 .tgz 文件打包依赖项
- jquery - 多个选择字段将ajax数据作为字符串传递
- c# - 使用多语言应用工具包加载翻译提供程序时出错
- sql - 在 NHibernate HQL 中使用 CASE WHEN 语句
- c# - Angular zip 文件下载问题 AWS