У меня есть запись, работающая во время работы приложения (добавлено аудио в фоновый режим), она будет записываться неограниченное количество раз, и приложение остается активным в фоновом режиме.xcode AVAudioRecorder Как выполнить фоновый снимок каждые 30 минут
Я бы хотел, чтобы приложение оставалось активным в фоновом режиме и записывало 30-секундный звуковой клип каждые 30 минут.
Я пробовал использовать NSTimer
в сочетании с методом AVAudioRecorder
recordForDuration:
, но приложение уничтожено до того, как NSTimer
может стрелять. Есть идеи?
Следующий код работает в фоновом режиме и записывается в течение 5 секунд каждые 5 секунд, но если я увеличил запланированныйTimerWithTimeInterval до 1 минуты, это не сработает.
- (void)viewDidLoad
{
[super viewDidLoad];
// retrieve avaudiosession instance
_session = [ AVAudioSession sharedInstance];
// set category
NSError *errRet;
[_session setCategory:AVAudioSessionCategoryPlayAndRecord error:&errRet];
[_session setActive:YES error:&errRet];
NSArray *dirPaths;
NSString *docsDir;
dirPaths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];
NSString *soundFilePath = [docsDir
stringByAppendingPathComponent:@"sound.caf"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
NSDictionary *recordSettings = [NSDictionary
dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:AVAudioQualityMin],
AVEncoderAudioQualityKey,
[NSNumber numberWithInt:16],
AVEncoderBitRateKey,
[NSNumber numberWithInt: 2],
AVNumberOfChannelsKey,
[NSNumber numberWithFloat:44100.0],
AVSampleRateKey,
nil];
NSError *error = nil;
_audioRecorder = [[AVAudioRecorder alloc]
initWithURL:soundFileURL
settings:recordSettings
error:&error];
if (error)
{
NSLog(@"error: %@", [error localizedDescription]);
} else {
[self recordAudio];
NSTimer* timer;
timer=[NSTimer scheduledTimerWithTimeInterval: 10.0 target:self selector:@selector(recordAudio) userInfo:nil repeats: YES];
NSLog(@"timer fired");
}
}
- (IBAction)recordAudio{
if (!_audioRecorder.recording)
{
NSError *errRet;
[_session setCategory:AVAudioSessionCategoryRecord error:&errRet];
[_session setActive:YES error:&errRet];
//_play.enabled = NO;
[_audioRecorder recordForDuration:5.0];
NSLog(@"Finished Recording");
}
}
Пожалуйста, включите часть вашего исходного кода в свой вопрос. –
Это работает, начиная запись каждые 10 секунд в течение 5 секунд, если я увеличиваю запланированныйTimerWithTimeInterval до 60 секунд, это не работает в фоновом режиме. – alien12
Я тоже сталкиваюсь с тем же вопросом. Вы сделали это и как это работает? – Jacky