猿问

如何让音效在应用处于后台状态时自动停止

我现在在用AVAduioPlayer在后台播放音效(白噪音软件),然后应用是允许用户设置播放时间的,但是当应用在后台时,NSTimer的回调函数是不会被调用的,这个时候我该如何停止音效呢?
代码:
-(void)play:(NSString*)soundNamewithTime:(NSNumber*)time
{
NSURL*soundUrl=[NSURLfileURLWithPath:[NSStringstringWithFormat:@"%@/sounds/%@.m4a",[[NSBundlemainBundle]resourcePath],soundName]];
_audioPlayer=[[AVAudioPlayeralloc]initWithContentsOfURL:soundUrlerror:nil];
_audioPlayer.numberOfLoops=-1;
[_audioPlayerplay];
[[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategoryPlaybackerror:nil];
[[AVAudioSessionsharedInstance]setActive:YESerror:nil];
[selfscheduleStopSound:time];//howtoimplementit.
}
开满天机
浏览 340回答 2
2回答

慕森卡

以下是解决办法:objectivec//App将要进入后台,实现applicationDidEnterBackgroundNotification,做处理[NSNotificationCenter.defaultCenteraddObserver:selfselector:@selector(applicationDidEnterBackgroundNotification)name:UIApplicationDidEnterBackgroundNotificationobject:nil];//App将要回到前台,实现applicationWillEnterForegroundNotification,做处理[NSNotificationCenter.defaultCenteraddObserver:selfselector:@selector(applicationWillEnterForegroundNotification)name:UIApplicationWillEnterForegroundNotificationobject:nil];你还可以在AppDelegate里面实现对应的方法来做处理,但是不建议你这么做,因为这样会让AppDelegate里面堆积太多要处理的东西,通过系统通知进行处理的好处是可以把这些耦合解开。

有只小跳蛙

我印象中可以直接配置出这个效果吧。试试[[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategorySoloAmbienterror:nil];,看可以吗?
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答