我现在在用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里面堆积太多要处理的东西,通过系统通知进行处理的好处是可以把这些耦合解开。
繁花不似锦
TA贡献1851条经验 获得超4个赞
我印象中可以直接配置出这个效果吧。试试[[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategorySoloAmbienterror:nil];,看可以吗?
添加回答
举报
0/150
提交
取消