gpt4 book ai didi

swift - 在前台、后台和杀死(从后台删除)应用程序中检测信标

转载 作者:搜寻专家 更新时间:2023-10-31 22:54:25 25 4
gpt4 key购买 nike

我正在研究前台、后台和杀死(从后台删除)应用程序中的信标检测。我有 kontakt 信标。我已经实现了位置管理器委托(delegate)方法,但我无法在前台检测到信标和背景甚至没有调用方法 didEnterRegiondidExitRegion 。对于解决方案,我将位置管理器委托(delegate)与 KTKDevicesManagerDelegate 合并。我无法在位置管理器中检测到信标,所以我尝试在位置管理器方法的 didRangeBeacons 中实现我启动 KTKDeviceManagerDelegate 的 devicesManager.startDevicesDiscovery() 那个时候检测前景和背景中的信标,但我不能当我们杀死应用程序时检测信标。我已经在 Info.plist 中添加了 NSBluetoothPeripheralUsageDescription 、 NSLocationAlwaysUsageDescription 、 NSLocationWhenInUseUsageDescription 、 bluetooth-central 、 fetch 、 location 。我在 didFinishLaunchingWithOptions requestAlwaysAuthorization(),requestWhenInUseAuthorization() 上添加了以下内容。

    //MARK:- Variable initializers
var devicesManager: KTKDevicesManager!
var locationManager = CLLocationManager()
let region = CLBeaconRegion(proximityUUID: NSUUID(uuidString: "********")! as UUID, identifier: "detected")

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

Kontakt.setAPIKey(“*******************”)

self.locationManager.delegate = self
devicesManager = KTKDevicesManager(delegate: self)
//When bluetooth Is on that time
devicesManager.startDevicesDiscovery(withInterval: 3)

}

//MARK: - KTKDevicesManagerDelegate Method

extension AppDelegate: KTKDevicesManagerDelegate {

func devicesManager(_ manager: KTKDevicesManager, didDiscover devices: [KTKNearbyDevice]) {

for device in nearbyDevices {
if let uniqueID = device.uniqueID {
print("Detected a beacon \(uniqueID)")
} else {
print("Detected a beacon with an unknown unique ID")
devicesManager.stopDevicesDiscovery()
}
}

}

func devicesManagerDidFail(toStartDiscovery manager: KTKDevicesManager, withError error: Error?) {

print("Discovery did fail with error: \(error)")
devicesManager.stopDevicesDiscovery()
}

}

//MARK: - Location Manager Method

extension AppDelegate: CLLocationManagerDelegate {

private func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
print("STATUS CHANGED: \(status.rawValue)")
if status == .authorizedAlways {
print("YAY! Authorized!")
locationManager.startMonitoring(for: region)

}
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

print("update location")

locationManager.startMonitoring(for: region)
locationManager.startRangingBeacons(in: region)
}



func locationManager(_ manager: CLLocationManager, didStartMonitoringFor region: CLRegion) {

print("The monitored regions are: \(manager.monitoredRegions)")
locationManager.startMonitoring(for: region)
locationManager.startRangingBeacons(in: region as! CLBeaconRegion)

}

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Location Manager failed with the following error: \(error)")
}

func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {

// print("beacons : \(beacons.count)")

devicesManager.startDevicesDiscovery()
//So called didDiscover method of KTKDevicesManagerDelegate method

}

func locationManager(_ manager: CLLocationManager, monitoringDidFailFor region: CLRegion?, withError error: Error) {
print("FAIL!")
}

func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
print("Region Entered")

locationManager.startMonitoring(for: region)
locationManager.startRangingBeacons(in: region as! CLBeaconRegion)

}


func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
print("Region exited")

locationManager.startMonitoring(for: region)
locationManager.startRangingBeacons(in: region as! CLBeaconRegion)

}

}

最佳答案

您必须在 NSLocationAlwaysUsageDescription 中添加并允许位置.如果你当时在信标区didEnterRegion那个时候方法执行并离开信标区域didExitRegion执行的方法,那时我们开始和停止设备发现。我们可以在前台、后台、锁定手机和处于终止状态的应用程序中检测信标。

按照下面给出的方法修改您的方法。

    func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
print("Region Entered")
devicesManager.startDevicesDiscovery()


}


func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
print("Region exited")
devicesManager.stopDevicesDiscovery()
}

关于swift - 在前台、后台和杀死(从后台删除)应用程序中检测信标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51960205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com