我目前在用户进入地区时向他们发送本地通知。但是,我不想立即通知他们,因为有时他们会开车经过这些地区,并且不想一直得到关于他们的通知。
因此,每当用户进入该区域时,都会调用didEnterRegion。我想等待30秒(或可配置的时间),然后检查用户是否仍在该区域(我知道该怎么做),如果用户仍在该区域,则通知用户。
Android有一种方法可以使用暂停属性。
我知道我可以使用dispatch_after(),但是当手机处于睡眠状态时(或暂停应用程序)我无法获得主线程。
当进入某个地区时,Apple的设计会自动唤醒手机。当发生这种情况时,我想等待30秒,然后再次检查用户是否仍然在位。这是一个目前无效的代码段:
// triggered when user enters monitored region.
func locationManager(manager: CLLocationManager, didEnterRegion region: CLRegion) {
// Wait 60 seconds and if user is still within region, try to send notification
delay(60){
self.locationManager.requestStateForRegion(region)
}
}
func locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion) {
// only notify user if user is still within this region.
if state == CLRegionState.Inside{
if region is CLCircularRegion {
handleRegionEvent(region)
}
}
}
答案 0 :(得分:1)
有办法做到这一点: 当应用程序收到用户已进入区域的通知时,应该在30秒之后安排本地通知。您需要在此通知中设置标识符。 现在,如果没有任何反应,该通知将被传递给用户。
可能会发生什么阻止这种情况? 用户离开该区域。
因此,当应用程序收到用户退出某个区域的通知时,它应该查找带有某个已知标识符的预定通知,并将其删除,因为它已不再相关。