即使在静音模式下,也可以在iPhone上播放声音
我想制作一个应用程序,在iPhone处于静默模式时创建声音、音乐或系统声音。在静音模式下,是否可以播放任何类型的声音,无论是音乐还是系统铃声?这是不可取的,但我是谁,你不能这么做。你可能有充分的理由去演奏声音即使在静音模式下,也可以在iPhone上播放声音,iphone,objective-c,ipad,avaudioplayer,Iphone,Objective C,Ipad,Avaudioplayer,我想制作一个应用程序,在iPhone处于静默模式时创建声音、音乐或系统声音。在静音模式下,是否可以播放任何类型的声音,无论是音乐还是系统铃声?这是不可取的,但我是谁,你不能这么做。你可能有充分的理由去演奏声音 如果您正在使用音频会话,请包括类参考。是,当手机设置为振动时,您可以播放声音。 只需使用AVAudioPlayer类 默认情况下,播放音频会话 声音将~不~尊重设置 iPhone上的静音开关。在里面 换句话说,如果你打电话给 播放声音和静音(硬件) iPhone上的开关设置为静音, 你仍能
如果您正在使用音频会话,请包括
类参考。是,当手机设置为振动时,您可以播放声音。
只需使用AVAudioPlayer类
默认情况下,播放音频会话
声音将~不~尊重设置
iPhone上的静音开关。在里面
换句话说,如果你打电话给
播放声音和静音(硬件)
iPhone上的开关设置为静音,
你仍能听到声音
这就是你想要的。现在您知道,在手机处于静音模式时播放音频会话仍会播放声音,您只需要知道如何创建音频会话来播放声音,如下所示:
摘自本网站:
为此,您需要导入头文件,并将AudioToolbox.framework添加到项目中
就这样
因此,从这个答案你现在知道,你可以播放声音,而手机是振动。
您不需要额外或特殊的代码来实现此功能,因为默认情况下它已经实现了这一功能
Pk只需将其放入您的视图下载中即可:
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
sizeof(sessionCategory), &sessionCategory);
适用于iOS 6及以上版本
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
要在静音模式下播放声音,甚至当声音转到背景时,请尝试以下操作:
将此代码放入应用程序:didFinishLaunchingWithOpitons:
[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
应用程序标识符背景中的以下代码:
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
还可以设置播放音频/空中播放的背景模式,包括AVFoundation header。和Swift 2、3、4.2
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print(error)
}
对于Objective C,您可以使用以下代码播放系统声音:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
*The system path could be modified.*
NSString *path = @"/System/Library/Audio/UISounds/begin_record.caf";
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[player play];
Swift-在播放音频/视频之前调用此功能,以便在手机处于静音状态时强制播放。这也会使当前正在播放的其他音频静音
如果不想使其他音频静音,可以将.duckOthers
更改为.mixWithOthers
func setupAudio() {
let audioSession = AVAudioSession.sharedInstance()
_ = try? audioSession.setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers)
_ = try? audioSession.setActive(true)
}
如果我是用户,我会被那个“功能”提示。。。毕竟,将手机置于静音模式的用户可能希望手机保持静音。我认为静音模式的目的是让手机保持静音?@pankaj在这种情况下,你是否尝试过另一种方法:将所有“不重要”的通话置于静音模式?这可能更可行。我想插话谈谈为什么这是一个完美的用户体验(如果没有滥用的话)。简单的例子是报警应用程序和用户显式播放视频的应用程序。与一个应用程序进行物理通信,它应该向您显示视频,但却让您想起设备处于静音状态,这很烦人。静音用于将计划外的中断(如电话、短信和其他警报)静音。将其等同于断开扬声器的连接是没有帮助的。。。特别是当你可以简单地将音量设置为零来实现这一点的时候;我正在制作一个广播应用程序,如果用户按下“播放”,他希望声音能出来。我不想让他为了听收音机而不得不取消手机的静音。除此之外,他不会被计划外的声音打扰。我认为这是完全可以接受的,与@WilliamNiu所说的相反,在无声模式下有任何代码可以播放声音。首先,感谢cool_me5000的回答。在我的例子中,当应用程序在后台(音量最小)时声音会响起,但如果应用程序在前台(音量最小),声音就不会响起。我正在测试iPodtouch 4代(我这么说是因为它没有静音开关)。你知道我可以做些什么来实现应用程序在这两种情况下都能发出声音吗?如果你在这里结束的话,因为这个解决方案在iPad上不起作用,只在iPhone上起作用:我只是在演示avplayervewcontroller
之前设置AVAudioSession
类别时遇到了这个问题。如果我在presentViewController
调用的完成块中设置类别(在实际调用play()
之前),它在两个设备系列上都可以正常工作。在iOS9上不工作有人在iOS9上找到解决方案吗?在iOS9的解决方案上,拜托?这在iOS9+上不起作用。你找到解决方案了吗?我现在还没有答案,因为我还没有必要这么做。另外,这个问题已经问了6年了,如果有人对iOS 9有答案,请随意编辑。在Swiftdo{try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)中,尝试AVAudioSession.sharedInstance().setActive(true)}捕获错误为NSError{//report error}
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print(error)
}
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
*The system path could be modified.*
NSString *path = @"/System/Library/Audio/UISounds/begin_record.caf";
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[player play];
func setupAudio() {
let audioSession = AVAudioSession.sharedInstance()
_ = try? audioSession.setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers)
_ = try? audioSession.setActive(true)
}