【发布时间】:2013-04-30 08:58:39
【问题描述】:
我正在开发一个在后台运行的应用程序。有时我需要告诉用户某事正在发生,所以我播放声音一定次数。为此,我制作了一个计时器,但问题是它不能超过总延迟时间的 10 秒,之后,不再有声音(但应用程序仍在运行)。我已经在前台模式下检查了这种行为,并且效果很好。
这是我需要通知用户时的代码:
AudioServicesPlaySystemSound(alarma);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
numAlarm = 1;
NSTimeInterval delay_in_seconds = 2.0;
dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW,delay_in_seconds*NSEC_PER_SEC);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_after(delay,queue,^{
[self fiBGTemps:ALARM];
});
“fiBGTemps”是这样的,
- (void)fiBGTemps:(int)sender
{
switch (sender){
case TEMP_SCAN:
(…)
break;
case ALARM:
if (numAlarm>0 && numAlarm<NUM_ALARM)
{
AudioServicesPlaySystemSound(alarma);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
NSTimeInterval delay_in_seconds = 2;
dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW,delay_in_seconds*NSEC_PER_SEC);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_after(delay,queue,^{
[self fiBGTemps:ALARM];
});
numAlarm++;
}
break;
}
}
这种行为正常吗?我错过了什么吗?
谢谢
卡尼克
【问题讨论】:
-
NUM_ALARM 设置为什么?也许这就是限制循环数量的原因。此外,这里似乎有两秒延迟的序列,而不是十秒延迟。
-
嗨@aLevelOfIndirection,NUM_ALARM 是我设置用于测试该时间限制的常数(#define NUM_ALARM 20)。这样我就可以看到声音响了多少次。我测试的另一种方法是更改“delay_in_seconds”值。如果我将此值设置为 8(例如),它只会播放 2 种声音。如果我将此值设置为 12(大于 10),它只会播放一种声音。
标签: iphone objective-c background grand-central-dispatch