Я хочу остановить свою игру, если пользователь вернется к игре с проигрывателем музыкального проигрывателя iDevice.Управление AVAudioPlayer из приложения AppDelegateWillEnterForeground
Приложение AppDelegate.mWillEnterForeground успешно проверяет музыкальный проигрыватель, , но я не знаю, как сказать моему AVAudioPlayer, чтобы остановить, отсюда.
Было бы очень благодарно, если кто-нибудь скажет мне, как это сделать? Это дает мне массивную головную боль!
AppDelegate.m:
- (void)applicationWillEnterForeground:(UIApplication *)application
{
UInt32 propertySize, audioIsAlreadyPlaying=0;
propertySize = sizeof(UInt32);
AudioSessionGetProperty(kAudioSessionProperty_OtherAudioIsPlaying, &propertySize, &audioIsAlreadyPlaying);
if(audioIsAlreadyPlaying){¨
NSLog(@"iDevice Music is playing!");
[myAudioPlayer stop];//<<< *** the problemo bit *** :(
}
}
Page1ViewController.m код, в случае, если это помогает:
- (void)viewDidLoad
{
NSError *myAudioSessionError = nil;
myAudioSession = [AVAudioSession sharedInstance];
if ([myAudioSession setCategory:AVAudioSessionCategoryAmbient error:&myAudioSessionError]){
NSLog(@"AVAudioSession created.");
}else {
NSLog(@"AVAudioSession not created.");
}
…
(if/else statements call the createAudioPlayer method.)
}
-(void)createAudioPlayer{
dispatch_queue_t dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(dispatchQueue, ^(void){
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *musicFilePath = [mainBundle pathForResource:@"main_music" ofType:@"aiff"];
NSData *musicFileData = [NSData dataWithContentsOfFile:musicFilePath];
NSError *myAudioPlayerError = nil;
//Start the audio player
self.myAudioPlayer = [[AVAudioPlayer alloc] initWithData:musicFileData error:&myAudioPlayerError];
if (self.myAudioPlayer != nil){//Check AVAudioPlayer successfully initiated
self.myAudioPlayer = self;
self.myAudioPlayer = -1;//loop continuously
if ([self.myAudioPlayer prepareToPlay]){
//(successfully created AudioPlayer)
}else {
//(failed to play)
}
}else {
//(failed to initiate an AudioPlayer)
}
});
}
Да, это правильно, но я не знаю, как это сделать! Это мой вопрос. Я просто набрал [myAudioPlayer stop]; чтобы проиллюстрировать мою проблему. Как мне это сделать? –
Так же, как вы объявили myAudioPlayer как свойство в Page1ViewController, создайте свойство для вашего AppDelegate, ссылающегося на страницу1ViewController. Поэтому в AppDelegate вы можете сделать self.page1ViewController. – skram
Я только что попробовал ваш код выше и получил эту ошибку предупреждения: Property 'Page1ViewController' не найден на объекте типа 'AppDelegate *' Это в основном то, что я пытаюсь сделать, хотя это синтаксис, который я изучаю. : | –