为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕标5832272 2019-04-10 20:49:13
我现在在用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.}
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

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

TA贡献1851条经验 获得超4个赞

我印象中可以直接配置出这个效果吧。
试试[[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategorySoloAmbienterror:nil];,看可以吗?
                            
查看完整回答
反对 回复 2019-04-10
  • 2 回答
  • 0 关注
  • 450 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信