音频播放器在后台播放,应该使用硬件静音开关
我想在前台,后台播放音频文件,它应该与静音开关一起工作,即静音开关打开时不应播放,如果静音开关关闭,则应播放音频。
**基本上正在开发SIP通话应用程序。 当用户接到电话时,应用程序应播放声音/铃声。 如果应用程序在后台/前台应该播放,如果硬件静音开关打开/关闭,它应该静音/取消静音。
为此,我使用AVPlyaer和下面的代码。
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:&error];
[session setActive:YES error:nil];
NSURL * audioFileUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test1" ofType:@"mp3"]];
AVPlayer *player = [[AVPlayer alloc] initWithURL: audioFileUrl];
[player play];
此外,我还添加了“应用程序播放音频或使用AirPlay播放音频/视频”到info.plist中的背景模式
这是在两种模式下播放,但硬件静音开关打开时不会静音。 如果我使用“AVAudioSessionCategoryAmbient”不在背景模式中播放。 我使用AVAudioPlayer,但在硬件开关打开时无法找到静音
请帮我解决它或以其他任何方式来达到此目的。 提前致谢。
您的音频会话类别可能设置不正确。 既然你想尊重静音开关,你应该使用SoloAmbient
AVAudioSessionCategorySoloAmbient
用于默认类别的类别,除非您使用setCategory:error:或setCategory:withOptions:error:方法设置类别。
屏幕锁定和Silent开关(称为iPhone上的Ring / Silent开关)会使您的音频静音。
默认情况下,使用此类别意味着您的应用程序的音频不可混合 - 激活您的会话将中断任何其他音频会话也是不可混合的。 要允许混合,请改用AVAudioSessionCategoryAmbient类别。
适用于iOS 3.0及更高版本。
您似乎已经使用了这个类别:
AVAudioSessionCategoryPlayback
用于播放录制音乐或其他声音的类别,这些对于成功使用您的应用程序至关重要。
使用此类别时, 您的应用音频会继续,无声开关会设置为无声或屏幕锁定。 (该开关在iPhone上称为铃声/静音开关。)要在应用程序转换到背景时继续播放音频(例如,屏幕锁定时),请将音频值添加到信息属性列表文件中的UIBackgroundModes项。
默认情况下,使用此类别意味着您的应用程序的音频不可混合 - 激活您的会话将中断任何其他音频会话也是不可混合的。 要允许为此类别混音,请使用AVAudioSessionCategoryOptionMixWithOthers选项。
适用于iOS 3.0及更高版本。
资料来源: https : //developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/index.html#//apple_ref/doc/constant_group/Audio_Session_Categories
我很高兴地说,我发现Skype是如何实现这一功能的。
在前台,我们可以使用任何一个类别的AVAudioSession来播放铃声。
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory: AVAudioSessionCategorySoloAmbient error:&error];
[session setActive:YES error:nil];
NSURL * audioFileUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test1" ofType:@"mp3"]];
AVPlayer *player = [[AVPlayer alloc] initWithURL: audioFileUrl];
[player play];
在后台我们必须使用自定义声音的本地通知。 这将与硬件静音开关一起使用。 但是这里声音文件的长度不应该超过30秒。
UILocalNotification* notification = [[UILocalNotification alloc] init];
[notification @"Title"];
[notification setAlertBody:@"Body"];
[notification setAlertAction:noteAction];
[notification setSoundName:@"ringtone.mp3"];
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];
希望这将是有用的:)。
以下是用于检测静音开关状态的库:http://sharkfood.com/content/Developers/content/Sound%20Switch/。 它基于Apple的公共API。 它只是播放系统声音并测量用于完成播放的时间量。 它在Instagram iOS应用程序中使用。
链接地址: http://www.djcxy.com/p/86873.html上一篇: Audio Player play in background and should be work with hardware mute switch
下一篇: Qt C++ library in Android Eclipse project: QSQLITE driver not loaded