如何查看iPhone是否处于静音模式?

3
我有一个邮件应用程序。如果用户成功发送了一封邮件,那么我需要通知他邮件已成功发送。为此,我需要知道他的手机是否处于静音模式(在这种情况下会有“振动”)或常规模式(在这种情况下会有“哔哔声”)。有人能帮我吗?
提前致谢。
2个回答

1

0
CFStringRef state;
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
if(CFStringGetLength(state) == 0)
{
    //SILENT

}
else
{
    //NOT SILENT

}

如果状态字符串为空,则手机处于静音状态 - 否则手机具有音频输出。
编辑:
记得添加AudioToolbox框架并导入。- Thomas Clayson
答案摘自(http://iphone-dev-tips.alterplay.com/2009/12/iphone-silent-mode-detection.html)

啊...你比我快了... :p 删除我的回答 - Thomas Clayson
您可以将其放在您想要使用的位置(在发送消息之后)。或者您可以将其放在一个名为“BOOL phoneIsOnSilentMode()”的方法中,并返回(CFStringGetLength(state)== 0)的结果。然后,在发送消息后想要使用它时,请调用“if(phoneIsOnSilentMode())”,如果为真则振动,如果为假则播放声音。 - Rich
嘿,我把这段代码放在“applicationdidFinishLaunching”方法中,但当我尝试在我的iPhone上运行它时,它只在安装后的第一次运行或者当我关闭手机后再次尝试时才运行。为什么会这样?难道它不应该每次启动我的应用程序时都运行吗?还有一个问题——状态变量,在我显示它的警告框中,总是显示为“speaker”,即使我更改了声音设置。有多少个状态,并且如何从iPhone的声音设置中更改它们。也就是说,我永远无法将状态变量设为null,它总是“speaker”。 - user393553
iPhone应用程序的状态有时会被存储 - 因此,并不一定每次从主屏幕上的应用程序图标单击时都会调用applicationDidFinishLaunching方法。无论如何,您肯定希望在播放声音或振动之前进行检查,对吗?否则,用户可能只是打开您的应用程序,开始使用它,然后在发送消息之前切换到静音。那么一旦消息发送成功,您就会得到关于音频状态错误的信息。将片段放入自己的方法中,并在发送消息后以及播放声音或振动之前调用该方法。 - Rich
请查看:http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html 和 http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html#//apple_ref/doc/constant_group/Audio_Session_Services_Property_Identifiers - Rich
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接