我尝试使用这些方法来尝试检测“振铃/静音”开关是否处于活动状态:
如何以编程方式感应iPhone静音开关?
AVAudioSession类别无法按文档要求运行
但是在我的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事件。有人有想法么?
顺便说一句,我在我的[AVAudioSession sharedInstance]中使用了AVAudioSessionCategoryAmbient类别。
不负相思意
相关分类