如何设置本地通知的持续时间

时间:2013-05-28 08:17:42

标签: iphone ios

在我的iPhone应用程序中,我需要显示本地通知。我想知道是否可以设置屏幕上显示本地通知的时间间隔?例如,我想在20秒内显示本地通知。我知道在播放声音时会显示本地通知。但我也发现无法重复本地通知声音:UILocalNotification repeat sound

4 个答案:

答案 0 :(得分:1)

本地通知没有到期概念。你告诉他们开火,由用户解雇或与他们互动。

关于让声音持续20秒(除了我会删除这个应用程序,如果它坚持播放20个通知声音!),让我们说比如你当前的声音持续5秒,你可以复制粘贴声音4次进入一个文件,然后播放。我认为最大声音长度为30秒,但我找不到支持此文档的文档。

答案 1 :(得分:1)

抱歉我的英语不好。 您只能使用NSCalendarUnit值重复本地通知。或者重置他(通知)并在方法(application:didReceiveLocalNotification :)中使用旧通知时设置新的。为此,您可以将自己的字典添加到通知对象userInfo值,并在以后在此方法中收到通知时处理它。但是,当应用未运行或未通过点击通知警报运行时,此方法无法在后台模式下工作。希望这会有所帮助。

答案 2 :(得分:0)

您可以通过每20秒更改notify.firedate来设置持续时间。

每20秒维持一次 - 你可以使用计时器

答案 3 :(得分:0)

如果是关于重复通知声音,那么你可以这样做:

UILocalNotification* notifyAlarm =[[UILocalNotification alloc] 
                                       init];
    if (notifyAlarm)
    {
        notifyAlarm.timeZone = [NSTimeZone defaultTimeZone];
        notifyAlarm.fireDate = nil;
        notifyAlarm.soundName=@"phone.wav";
        notifyAlarm.alertBody =@"value";
        notifyAlarm.alertAction=@"value";
        notifyAlarm.hasAction=YES;
        [[UIApplication sharedApplication] presentLocalNotificationNow:notifyAlarm];
        [notifyAlarm release];

        UIApplicationState state = [[UIApplication sharedApplication] applicationState];
        if (state == UIApplicationStateInactive || state==UIApplicationStateBackground) {
            [self backgroundHandlerToPlayCallTone];
        }
    }

-(void)backgroundHandlerToPlayCallTone {
UIApplication* app = [UIApplication sharedApplication];
bgTaskToPlayCallTone = [app beginBackgroundTaskWithExpirationHandler:^{
    dispatch_async(dispatch_get_main_queue(), ^{
        [app endBackgroundTask:self->bgTaskToPlayCallTone];
        self->bgTaskToPlayCallTone = UIBackgroundTaskInvalid;
    });
}];

// Start the long-running task 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{
//dispatch_async(dispatch_get_main_queue(), ^{
    [self startCallTone];
    [app endBackgroundTask:self->bgTaskToPlayCallTone];
    self->bgTaskToPlayCallTone= UIBackgroundTaskInvalid;
}); 
}

-(void) startCallTone {
if(audioPlayer !=nil) {
    [audioPlayer pause];
    [audioPlayer release];
    audioPlayer=nil;
}
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"phone" ofType:@"wav"]];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[audioPlayer setDelegate:self];
audioPlayer.numberOfLoops=10;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
//[[AVAudioSession sharedInstance] setActive:YES withFlags:AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation error:nil];
UInt32 allowMixing = true;
AudioSessionSetProperty (kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(allowMixing),&allowMixing);

[[AVAudioSession sharedInstance] setActive: YES error: nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[audioPlayer play];
}