【发布时间】:2011-10-17 14:22:39
【问题描述】:
我尝试使用这些方法来检测响铃/静音开关是否处于活动状态:
How to programmatically sense the iPhone mute switch?
AVAudioSession category not working as documentation dictates
但在我的 iPhone 4 上,“状态”值始终为“扬声器”(CFStringGetLength(state) 返回的长度值始终为 7)。有没有人成功使用过这个方法?如果是,在什么样的设备和 SDK 版本上?
我这样称呼它:
- (BOOL)deviceIsSilenced {
CFStringRef state;
UInt32 propertySize = sizeof(CFStringRef);
OSStatus audioStatus = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
if (audioStatus == kAudioSessionNoError) {
NSLog(@"audio route: %@", state) // "Speaker" regardless of silent switch setting, but "Headphone" when my headphones are plugged in
return (CFStringGetLength(state) <= 0);
}
return NO;
}
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
audioSession.delegate = self;
[audioSession setCategory:AVAudioSessionCategoryAmbient error:nil];
[audioSession setActive:YES error:nil];
NSLog(@"muted? %i", [self deviceIsSilenced]);
...
}
我在想,当手机上的物理开关被切换时,可能会触发其他一些(更准确的)kAudioSessionProperty 事件。有人有什么想法吗?
顺便说一句,我将 AVAudioSessionCategoryAmbient 类别与我的 [AVAudioSession sharedInstance] 一起使用。
更新:我也尝试过使用不同的音频类别和一些其他音频会话属性,在静音/取消静音开关时似乎没有触发。 :(
一月。 2014 年 1 月 1 日更新: 这有点小题大做,我在 iPhone 5S 上使用它进行多任务处理时遇到了崩溃,但是如果您在新接受的答案中链接了 SoundSwitch 库,那么您可以这样做想检测静音开关。它甚至适用于 iOS 7。
【问题讨论】:
-
[self deviceIsSilenced] 中有什么?
-
我已经用
deviceIsSilenced更新了帖子,谢谢你的提问,简! :) -
FWIW,它也不适合我......
-
我正要发布一个完全相同的副本(iPhone 4 .. 等)
-
请注意:我使用了stackoverflow.com/questions/287543/… 的环境开关,没用...
标签: iphone ios4 iphone-sdk-3.0 avaudioplayer avaudiosession