在前台、后台和杀死(从后台删除)应用程序中检测信标
beacon detecting in foreground, background and kill (remove from background) app
我正在研究前台、后台和终止(从后台删除)中的信标检测app.I kontakt
beacon.I 已经实施了位置管理器委托方法,但我无法检测到前台和后台的信标甚至没有调用方法 didEnterRegion
和 didExitRegion
。对于解决方案,我将位置管理器委托与 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
方法执行时不在信标区域中,则我们开始和停止设备发现。我们可以在前台、后台、锁定 phone 和应用程序的终止状态中检测到信标。
按照下面给出的方法修改您的方法。
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
print("Region Entered")
devicesManager.startDevicesDiscovery()
}
func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
print("Region exited")
devicesManager.stopDevicesDiscovery()
}
我正在研究前台、后台和终止(从后台删除)中的信标检测app.I kontakt
beacon.I 已经实施了位置管理器委托方法,但我无法检测到前台和后台的信标甚至没有调用方法 didEnterRegion
和 didExitRegion
。对于解决方案,我将位置管理器委托与 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
方法执行时不在信标区域中,则我们开始和停止设备发现。我们可以在前台、后台、锁定 phone 和应用程序的终止状态中检测到信标。
按照下面给出的方法修改您的方法。
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
print("Region Entered")
devicesManager.startDevicesDiscovery()
}
func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
print("Region exited")
devicesManager.stopDevicesDiscovery()
}