AVAudioRecorder n'enregistre pas lorsque l'écran est verrouillé

J'ai essayé de surmonter cela pendant un moment. J'essaie d'save du son, mais l'AVAudioRecorder n'enregistre pas lorsque l'écran est verrouillé. Il continue à save une fois que l'écran est déverrouillé, mais l'audio enregistré lorsque l'écran a été verrouillé est perdu pour toujours. Je ne trouve rien de mal avec ce que je fais:

-(void) startRecording { // Begin the recording session. _session = [AVAudioSession sharedInstance]; NSError *setCategoryError = nil; NSError *startRecordError; [_session setActive:YES error:&startRecordError]; [self GKLog:[NSSsortingng ssortingngWithFormat:@"recorder session error? :%@", startRecordError]]; [_session setCategory: AVAudioSessionCategoryRecord error: &setCategoryError]; if (setCategoryError) { NSLog(@"some error");} //set me as delegate _session.delegate=(id <AVAudioSessionDelegate>) self; NSMutableDictionary* recordSetting = [[NSMutableDictionary alloc] init]; [recordSetting setValue :[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey]; [recordSetting setValue :[NSNumber numberWithInt:8] forKey:AVEncoderBitRateKey]; [recordSetting setValue:[NSNumber numberWithFloat:8000.0] forKey:AVSampleRateKey]; [recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; if (!self.currentPath) { NSLog(@"can't record, no path set!"); return; } NSError *error; NSURL *url=[NSURL fileURLWithPath:self.currentPath]; //Setup the recorder to use this file and record to it. _recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&error]; [self GKLog:[NSSsortingng ssortingngWithFormat:@" recorder:%@",_recorder]]; _recorder.delegate=(id <AVAudioRecorderDelegate>) self; [_recorder prepareToRecord]; //Start the actual Recording [_recorder record]; } 

Des idées, s'il vous plaît?

    Ok, donc la réponse à ma propre question, qui m'a pris beaucoup de time pour le savoir, est la suivante: Le code que j'ai posté est bon, mais pour fonctionner, il doit fonctionner en arrière-plan après que l'écran ait été verrouillé. Pour cela, il faut append un tableau UIBackgroundModes dans le file plist de l'application, et append 'audio' comme l'un de ses objects. Cela indique au système de laisser l'application fonctionner avec l'audio en arrière-plan.

    Voici la documentation pas si facile à find . Malheureusement Apple ne spécifie pas cela dans leur documentation des catégories de sessions audio où ils prétendent que certaines catégories fonctionnent en arrière-plan. De toute façon, j'espère que cette réponse sera disponible pour d'autres qui ont un problème similaire …

    Vous pouvez envisager de définir la catégorie comme AVAudioSessionCategoryRecord sur l' AudioSession

    Que diriez-vous de désactiver le locking de l'écran jusqu'à ce que vous avez terminé l'logging?

     [UIApplication sharedApplication].idleTimerDisabled = YES; // Do recording here [UIApplication sharedApplication].idleTimerDisabled = NO; 

    N'oubliez pas de réactiver le locking de l'écran lorsque vous avez terminé!