#objective-c #ios7
#цель-c #ios7
Вопрос:
Как приостановить воспроизведение музыки AVAudioPlayer в другом контроллере, это мой код
AppDelegate.h
#import <AVFoundation/AVFoundation.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate,AVAudioPlayerDelegate>
{
AVAudioPlayer *audioPlayer1;
}
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSString *music=[[NSBundle mainBundle]pathForResource:@"music" ofType:@"mp3"];
audioPlayer1=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:music] error:NULL];
[audioPlayer1 play];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
return YES;
}
ViewController.h
#import <AVFoundation/AVFoundation.h>
@interface ViewController : UIViewController
{
AVAudioPlayer *audioPlayer1;
}
ViewController.m
- (void)remoteControlReceivedWithEvent:(UIEvent *)event
{
if(event.type == UIEventTypeRemoteControl)
{
switch(event.subtype)
{
case UIEventSubtypeRemoteControlPause:
[audioPlayer1 pause];
break;
case UIEventSubtypeRemoteControlStop:
[audioPlayer1 pause];
break;
case UIEventSubtypeRemoteControlPlay:
[audioPlayer1 play];
break;
default:
break;
}
}
}
но это не сработало. Как я могу исправить или обойти эту проблему?
Ответ №1:
Свойство audioPlayer1 в вашем AppDelegate не указывает на ваш audioPlayer1 в вашем ViewController. Вы можете сделать это следующим образом:
AppDelegate.H
ViewController.M
Редактировать ответ на второй вопрос:
Если CDVStream является другим UIViewController, используйте тот же подход, чтобы указать свойство AppDelegate на ваше свойство CDVStream. Важно понимать, что AppDelegate содержит AudioPlayer, и вы используете свойства в своих ViewControllers для регулирования его поведения с помощью свойства AudioPlayer, которое указывает на него.
Так что делайте это вот так:
- в вашем CDVStream.M импортируйте AppDelegate
#import "AppDelegate.h"
- также импортируйте фреймворк AVFoundation
#import <AVFoundation/AVFoundation.h>
- добавьте AVAudioPlayerDelegate в интерфейс
@interface CDVStream () <AVAudioPlayerDelegate>
- создание свойства AVAudioPlayer
@property (strong, nonatomic)AVAudioPlayer * audioPlayer;
- в вашем
viewDidLoad
методе установите свойство AudioPlayer так, чтобы оно указывало на свойство AppDelegate.
Не большой поклонник отдельных фрагментов информации / кода, поэтому приведенный ниже экран содержит все вышеперечисленное:
Комментарии:
1. Спасибо, Майкл, что ответил на мои вопросы, но я имею в виду, если AVAudioPlayer воспроизводит CDVStream и управляет AVAudioPlayer в фоновом режиме на ViewController
2. Если CDVStream является UIViewController, то вы не можете сохранить AVAudioPlayer в фоновом режиме. Вам либо нужно создать одноэлементный элемент (например, AppDelegate ), который остается в живых в течение всего срока службы приложений, либо передать свойство AudioPlayer новому ViewController, прежде чем другой будет отклонен, например, через prepareForSegue.
3. Спасибо за это @Michael 1