我正在开发一款iPad应用程序,可与播放声音的配件连接.当iPad连接到配件时,我想将所有系统声音静音但允许其他声音(iPod).
造成这种情况的部分原因是附件是在现场演出期间使用的.显然,让电子邮件,警报或任何其他系统声音通过并放大(疯狂大声)会很烦人.
我已经看过使用AVAudioSession(阅读音频会话了解更多)并尝试了所有的AudioSessionCategories.这些类别都不会使系统声音静音,而是只允许您静音应用程序声音(iPod) - 对我的目的无用.
我还在" 系统声音服务 " 上找到了文档,但这只允许你播放系统声音.这里没有api可以在你的应用程序运行时禁用系统声音.
最后一点,我们通过包含MPVolumeView轻松调整iPad级别(音量),但我们希望用户想要播放iPod音乐.如果在播放iPod中的音乐(或音乐从其他应用程序)和电子邮件来过,你会惊讶有LOUD /烦人,电子邮件通过我们的配件去时,突然变得.甚至可能会损坏设备.:d
Sam*_*Sam 14
使用AVSystemController可以改变系统声音,结果是铃声btw.但是,AVSystemController存在于私有Celestial框架中.由于UIKit引用了这个框架,因此仍然可以在不直接引用它的情况下使用该类.
Apple禁止使用私有API,因此仅此一点就是个坏主意.鉴于我的情况,我认为他们可能会例外,但我可能会放弃这个课程,因为我认为它没有解决我的问题.它确实使声音静音,但是当我插入我的配件时,即使振铃音量设置为0,系统也会以最大音量发出声音.这让我相信解决问题的答案就在于MFI文件.
无论如何,这里是如何使用私有框架/ api更改铃声(这将使你的应用程序在没有某种特殊许可的情况下被拒绝).
简答:
[[AVSystemController sharedAVSystemController] setVolumeTo:0 forCategory:@"Ringtone"];
Run Code Online (Sandbox Code Playgroud)
无需直接引用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];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11369 次 |
| 最近记录: |