gpt4 book ai didi

iphone - 如何禁用 iOS 系统声音

转载 作者:可可西里 更新时间:2023-11-01 03:05:51 27 4
gpt4 key购买 nike

我正在开发一个 iPad 应用程序,该应用程序与播放声音的配件相连。当 iPad 连接到附件时,我想将所有系统声音静音但允许其他声音(iPod)。

部分原因是该配件适合在现场表演期间使用。显然,让电子邮件、警报或任何其他系统声音通过并放大(疯狂大声)会很烦人。

我看过使用 AVAudioSession (阅读 Audio Sessions 以了解更多信息)并尝试了所有 AudioSessionCategories .这些类别都不会使系统声音静音,而是只允许您将应用程序声音 (iPod) 静音 - 对我的目的没有用。

我还在“System Sound Services”上找到了文档,但这只允许您播放系统声音。此处没有用于在您的应用运行时禁用系统声音的 API。

最后一点,我们通过包含 MPVolumeView 使调整 iPad 级别(音量)变得容易,但我们希望用户想要播放 iPod 音乐。如果在播放 iPod 音乐(或来自其他应用程序的音乐)时收到一封电子邮件,您会惊讶于通过我们的配件时这封电子邮件突然变得多么响亮/烦人。它甚至有可能损坏设备。 :D

最佳答案

可以使用 AVSystemController 更改系统声音,顺便说一句,原来是铃声。但是,AVSystemController 存在于私有(private)的 Celestial 框架中。由于这个框架被 UIKit 引用,所以仍然可以在不直接引用它的情况下使用这个类。

Apple 禁止使用私有(private) API,所以这本身就是一个坏主意。考虑到我的情况,我认为他们可能会破例,但我可能会放弃这门类(class),因为在学习之后我意识到它并没有解决我的问题。它确实使声音静音,但只要我插入配件,即使铃声音量设置为 0,系统声音也会以最大音量发出。这让我相信解决我的问题的答案是MFI 文档。

无论如何,这是使用私有(private)框架/api 更改铃声的方法(这将导致您的应用在没有某种特殊许可的情况下被拒绝)。

简答:

[[AVSystemController sharedAVSystemController] setVolumeTo:0 forCategory:@"Ringtone"];

无需直接引用 Celestial frameork/AVSystemController.h 即可回答:

- (void) setSystemVolumeLevelTo:(float)newVolumeLevel
{
Class avSystemControllerClass = NSClassFromString(@"AVSystemController");
id avSystemControllerInstance = [avSystemControllerClass performSelector:@selector(sharedAVSystemController)];

NSString *soundCategory = @"Ringtone";

NSInvocation *volumeInvocation = [NSInvocation invocationWithMethodSignature:
[avSystemControllerClass instanceMethodSignatureForSelector:
@selector(setVolumeTo:forCategory:)]];
[volumeInvocation setTarget:avSystemControllerInstance];
[volumeInvocation setSelector:@selector(setVolumeTo:forCategory:)];
[volumeInvocation setArgument:&newVolumeLevel atIndex:2];
[volumeInvocation setArgument:&soundCategory atIndex:3];
[volumeInvocation invoke];
}

关于iphone - 如何禁用 iOS 系统声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6284402/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com