命中区域时不显示本地通知



我正在开发一个简单的To Do应用程序,该应用程序使用UILocalNotification中支持CLRegion的IOS 8功能。

这是我用来安排本地通知的代码:

    var schedule = false
    let notification = UILocalNotification()
    /// Schedlue with date
    if let reminder = self.dateReminderInfo {
        schedule = true
        notification.fireDate = reminder.fireDate
        notification.repeatInterval = reminder.repeatInterval
        notification.alertBody = self.title
    }
    /// Schedule with location
    if let reminder = self.locationReminderInfo {
        schedule = true
        let region = CLCircularRegion(circularRegionWithCenter: reminder.place.coordinate, radius: CLLocationDistance(reminder.distance), identifier: taskObjectID)
        region.notifyOnEntry = reminder.onArrive
        region.notifyOnExit = reminder.onArrive
        notification.region = region
        notification.regionTriggersOnce = false
    }
    /// Schedule
    if schedule {
        notification.userInfo = ["objectID": taskObjectID]
        UIApplication.sharedApplication().scheduleLocalNotification(notification)
    }

按日期安排工作。我安排通知,退出应用程序,在适当的时间通知会显示在屏幕上,很棒。问题是当我安排通知的位置。我通过坐标和半径,单位为米(例如100米)。该应用程序没有显示任何内容。我在家里测试,把点放在1公里的距离,然后到达那里。未显示任何通知。我也在玩模拟器,并将位置从那里的可用位置更改为我住处附近的自定义位置。未显示任何通知。问题出在哪里?

在AppDelegate中,我正在注册通知:

    application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert | UIUserNotificationType.Badge, categories: nil))

这是定位服务的代码。

func startLocationService() {
    self.locationManager = CLLocationManager()
    self.locationManager.delegate = self
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
    let status = CLLocationManager.authorizationStatus()
    if status == CLAuthorizationStatus.AuthorizedWhenInUse || status == CLAuthorizationStatus.Denied {
        let title = (status == CLAuthorizationStatus.Denied) ? "Location services are off" : "Background location is not enabled"
        let message = "To use background location you must turn on 'Always' in the Location Services Settings"
        let alertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
        /// Settings
        alertController.addAction(UIAlertAction.normalAction("Settings", handler: { _ in
            UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!)
            return
        }))
        /// Cancel
        alertController.addAction(UIAlertAction.cancelAction(String.cancelString(), handler: nil))
        self.presentViewController(alertController, animated: true, completion: nil)
    } else if status == CLAuthorizationStatus.NotDetermined {
        /// nothing
    }
    self.locationManager.requestAlwaysAuthorization()
    self.locationManager.requestWhenInUseAuthorization()
    self.locationManager.startUpdatingLocation()
}

CLLocationManager正在工作,因为我有一个经常调用的委托方法。

/// Mark: CLLocationManagerDelegate
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    if let location = locations.first as? CLLocation {
        self.navigationItem.title = "(location.coordinate.latitude)" + " " + "(location.coordinate.longitude)"
        println(self.navigationItem.title)
    }
}

我正在尝试第二天解决这个问题,但找不到一个好的解决方案,即当用户出现在这个地方或离开这个地方时,如何显示本地通知。我不知道使用UILocalNotification region属性是否适合这个解决方案,或者我应该创建一个机制,搜索我在应用程序中保存的位置,并在每次位置更改时进行检查。对本主题的任何评论也将不胜感激;)

提前谢谢。

我发现您没有注册通知

let settings=UIUserNotificationSettings(对于Types:notificationType,类别:类别)application.registerUserNotificationSettings(settings)

您可以在Swift的iOS 8通知中找到更多信息,也可以在CoreLocation和region Monitoring 中查找更多信息

我遇到了同样的问题,但我找到了触发通知的方法。看起来它没有响应半径参数。我触发通知的方式是模拟离我所在地区很远的位置。

因此,如果我将该地区设置为丹麦的一个小城市,并将我的位置移动1公里,然后再返回,这不会触发。然而,如果我为丹麦的同一个小城市设置区域,并将我的位置移到伦敦,然后再移回来,将触发。

所以,对我来说,半径参数似乎在某种程度上被丢弃了?我试着用半径250.0、100.0、10.0、0.0001,但没有任何影响。

这可能会激励其他人了解问题可能是什么以及如何解决它吗?

相关内容

  • 没有找到相关文章

最新更新