我在我的应用程序中使用信标(app设置为后台),我在beacon:DidExitRegion:
上设置了一系列UILocalNotifications(当信标丢失时会发出警报)。
编辑:当应用在后台时,用户退出区域,然后正确设置通知。当用户想要在应用程序设置时仍处于后台时关闭应用程序时,我想要全部禁用它们。 /编辑
问题是,我要在AppWillTerminate
中禁用所有这些通知。根据{{3}}当app处于挂起状态(在后台等待从信标获取信号 - CoreLocation)时,不会调用appWillTerminate
。用户通常会在应用程序处于后台时关闭该应用程序,并且不会删除警报通知。
有什么方法可以摆脱这些通知?
我有一个建议:
在后台执行“人工”有限长度任务(如documetation)
并在收到beacon:didExitRegion:
- >后实际运行应用程序它不会被暂停,appWillTerminate
将被调用。
然而,它只能工作10分钟,我认为这不是一件好事。
也许其他方法可以做到这一点? 感谢。
答案 0 :(得分:1)
// Specify custom data for the notification
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"];
localNotif.userInfo = infoDict;
您可以为通知提供识别密钥,并可以通过
将其删除UIApplication *app = [UIApplication sharedApplication];
NSArray *eventArray = [app scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++)
{
UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
NSDictionary *userInfoCurrent = oneEvent.userInfo;
NSString *key=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:@"someKey"]];
if ([uid isEqualToString:uidtodelete])
{
//Cancelling local notification
[app cancelLocalNotification:oneEvent];
break;
}
}
来自Apple文档:
对于不支持后台执行或链接到iOS 3.x或更早版本的应用程序,当用户退出应用程序时,始终会调用此方法。对于支持后台执行的应用程序,当用户退出应用程序时通常不会调用此方法,因为在这种情况下应用程序只是移动到后台。但是,可以在应用程序在后台运行(未暂停)并且系统因某种原因需要终止它的情况下调用此方法。
applicationWillTerminate when is it called and when not
如果您的应用已启用后台,请使用:
- (void)applicationDidEnterBackground:(UIApplication *)application
//位置经理代表
-(void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
if (state == CLRegionStateInside)
{
//Start Ranging
[manager startRangingBeaconsInRegion:self.beaconRegion];
}
else
{
//Stop Ranging here
}
}
答案 1 :(得分:0)
如果某个应用程序被iOS终止(例如,您在任务切换器中向上滑动),则下次进入/退出信标区域时,[Setup]
CreateAppDir=No
的{{1}}方法将为在AppDelegate
或didFinishLaunchingWithOptions
之前调用。因此,您可以:
在didEnterRegion
初始化didExitRegion
。
在_launchTimetimestamp
中检查过去didFinishLaunchingWithOptions
是否小于一秒左右,如果是,则禁止通知。
答案 2 :(得分:0)
当用户在任务切换器中刷新您的应用时,您无法执行任何操作。没有回调,appWillTerminate
或其他。这是设计的。
您可以修改延迟通知,以便在程序控制下经过一段时间的延迟后,您的应用会立即发送这些通知。这样,只有在计时器熄灭时应用程序仍在运行时才会发送它们。诀窍是您的应用程序可能由于其他原因而被暂停(用户锁定手机,切换到另一个应用程序),因此您可能需要执行后台任务。顺便说一句,iOS 7+的限制现在是3分钟而不是10分钟,因此这是您可以可靠地延迟通知的最长时间。