如何在代码中判断用户是不是在其设置菜单中“锁定了音量”
Posted
技术标签:
【中文标题】如何在代码中判断用户是不是在其设置菜单中“锁定了音量”【英文标题】:How to tell in code if the user has "Locked the Volume" in their settings menu如何在代码中判断用户是否在其设置菜单中“锁定了音量” 【发布时间】:2011-10-18 13:55:31 【问题描述】:目前,我将音量设置为最大,然后检查音量是最大还是更低。如果它的值较低,则用户必须在其系统上设置音量锁定。
这很好用,但我想知道是否有一些方法可以调用,或者有一些属性可以检查,哪个可以免费在代码中告诉我这一点?我一直在网上寻找如何做到这一点,但我似乎找不到任何东西。提前致谢!
编辑: 原来我之前设置最大音量,然后检查是否较低,看看是否有音量锁定的方法在设备。似乎音量是通过音量锁定来缩放的,而不是仅仅被切断。
现在我完全坚持这一点。是否有任何私有方法或属性可以用来检测这一点?
【问题讨论】:
更改用户的音量设置不是很粗鲁吗? 我需要确保音量恒定。否则,我输出的声音会因每个用户的系统音量而异。我应该提到这一点! 用户是否自行配置卷 - 并在此过程中警告卷锁定?假设硬件相同,只是周围环境会大大改变感知的音量。 (图书馆与拥挤的地铁作为一个更极端的案例......) (也有可能音量被锁定在最大值:-) 这不是音量锁,而是限制。所以你不能“锁定到最大值”,这与根本没有限制是一样的。如果您使用这些设置,如果您将限制滑块一直转到最大值,您会看到限制被标记为“关闭”。 【参考方案1】:我认为您要求的是确定 iphone 是否有音量限制。我一直在寻找答案,但找不到答案。这是一种检查音量的方法,希望对您有所帮助。
在您的 XIB 中,您可以添加一个滑块来检查音量大小,因此基本上您可以判断它是否静音,并知道音量大小。为了更多地了解这个类,这里是链接http://blog.stormyprods.com/2008/09/proper-usage-of-mpvolumeview-class.html,但先试试这个:
以下代码将创建类似于音量条的内容。
- (void)viewDidLoad
// create a frame for MPVolumeView image
CGRect frame = volumeViewHolder.bounds; // CGRectMake(0, 5, 180, 0);
volumeView = [[[MPVolumeView alloc] initWithFrame:frame] autorelease];
[volumeView sizeToFit];
[volumeViewHolder addSubview:volumeView];
for (UIView *view in [volumeView subviews])
if ([[[view class] description] isEqualToString:@"MPVolumeSlider"])
volumeViewSlider = view;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(volumeChanged:)
name:@"AVSystemController_SystemVolumeDidChangeNotification"
object:nil];
- (void) volumeChanged:(NSNotification *)notify
[volumeViewSlider setValue:[[[notify userInfo] objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] floatValue]];
我听说由于某种原因,如果您使用某个课程(我的示例中的课程),Apple 不允许您销售应用程序,但我对此不太确定,我会仔细检查并确保你被“允许”使用它。但是代码应该可以工作。
【讨论】:
我认为这只会显示当前的音量设置。这样做的问题是音量似乎是缩放的,而不是受限的,因此即使系统音量被限制为 0.5,volumeChanged 方法仍将报告值 1。我会试试这个并回复你。感谢您的建议! 不幸的是,我也无法让您的上述代码正常工作。似乎根据您提供的链接,此代码与当前的 SDK 不再相关,不应使用。不过感谢您的帮助,这是一个难题!【参考方案2】:这个问题有很多答案,但它们似乎都违反了 Apple 的指导方针或 App Store 策展人,因为 Apple 没有提供官方方法来做到这一点。
但是,您可以利用一项功能来发现这一点,即当设备静音时,操作系统将根本不会播放声音 - 因此,如果您播放 800 毫秒的声音文件,您需要计算播放时间小于800ms就可以推断出静音开关打开了。
我建议使用 800 毫秒的静音文件来使用这个技巧,这样用户就不会突然遇到意外的声音。
请参阅此处了解启发我的文章:http://inforceapps.wordpress.com/2009/07/08/detect-mute-switch-state-on-iphone/
此外,您可能希望使用Audio Toolbox 来简单地执行此操作并保证正在使用静音开关。
【讨论】:
即使他们不遵循 Apple 的指导方针,您能否发布一个找出音量上限的方法? 这个问题有几个技巧不再有效:***.com/questions/287543/… 这些问题涉及检测应用程序是否静音。他们不处理找出用户是否在设置中有音量限制。你知道有什么方法可以检测到吗? 是的,很抱歉我误解了这个问题。 我也很想知道这一点。音量“限制”不是静音与否。不知道您要达到什么目的,我建议在您的应用程序启动时提示用户“为了获得最佳效果,音量必须设置为....”。很抱歉这种蹩脚的工作,但我不确定是否有办法用整个沙盒做你想做的事。此外,我认为您可以通过付费的开发者会员资格每年免费向 Apple 工程师提问两个问题。我从来没有这样做过,但它可能适合你。【参考方案3】:考虑将音量设置为最大,然后录制输出通道并播放短音 - 然后将该录制样本的峰值与没有音量限制器的已知样本进行比较。 如果 iPad 在录制访问之前缩放输出音量,这将起作用。
我希望我有更多关于如何记录输出的信息,但我没有太多的个人经验。精通记录输入的人应该能够为您指出正确的方法。
【讨论】:
以上是关于如何在代码中判断用户是不是在其设置菜单中“锁定了音量”的主要内容,如果未能解决你的问题,请参考以下文章