点击自定义键盘按钮时如何播放铃声

Posted

技术标签:

【中文标题】点击自定义键盘按钮时如何播放铃声【英文标题】:How to play tock sound when tapping custom keyboard buttons 【发布时间】:2014-06-30 18:24:32 【问题描述】:

一段时间以来,我一直在为 ios 8 开发自定义键盘,到目前为止一切正常,但我仍然无法理解这种敲击声。

我搜索了这个问题的高低,并尝试了几种方法,包括

    使用音频工具箱 使用 AVFoundation 将 tock.caf 放入我的包中即可播放

其中一些在模拟器中有效,但在我的设备中均无效。 在点击自定义键盘按钮时成功播放声音的任何人都可以分享一些工作代码吗?如果代码能够尊重声音设置,那就最好了。

【问题讨论】:

***.com/a/10299080/2446155 【参考方案1】:

正如上面提到的 Farzad Nazifi Allow openAcesess 在全新安装后,解决了我的问题。 我为playing system keyboard tap sound推荐一个更简单的解决方案

Swift 和 Objective-C 都一样 `我们不需要导入任何自定义声音文件,只需播放系统敲击声音即可。

导入 AudioToolbox 框架:

#import <AudioToolbox/AudioToolbox.h>

AudioServicesPlaySystemSound(1104)

此代码在iOS 8 beta 5中测试,希望苹果能修复GM版本的bug(如果是bug)。

【讨论】:

【参考方案2】:

最后我得到了其他 SO thread 的答复。

- (void)playSound

    NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"Tock" ofType:@"caf"];
    SystemSoundID soundID;
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);
    AudioServicesPlaySystemSound (soundID);

我已在 iOS8 Beta 2 上的模拟器和设备上实现并验证了此方法。

【讨论】:

当我使用 AudioServicesPlaySystemSound 时,我有这个错误:bootstrap_look_up failed with code: 1100, waiting to retry to connect to system sound server。这适用于 beta 3 吗? 在物理设备中,当我按下键时它会滞后。 在设备上使用它时,一切都会冻结。 @StanleyKubrick 同样在这里/:你知道这是否特定于 iOS8Beta5 吗? @AlbertRenshaw 我希望这是一个 beta 5 错误,我正在等待后续版本的修复。【参考方案3】:

导入框架:

#import <AudioToolbox/AudioToolbox.h>

并使用:

AudioServicesPlaySystemSound(1104);

【讨论】:

【参考方案4】:

这里的关键是iOS只能播放here描述的文件类型。 iOS 无法播放文件类型.caf。以下代码在 iOS 上应该可以正常工作。您可以使用this 网站将您的.caf 文件转换为他们在网站上可用且兼容的任何文件。我已经对其进行了测试,即使没有在任何地方指定,.caf 转换也可以工作。

-(void)buttonPressed:(UIButton *)theButton 


    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
    [[AVAudioSession sharedInstance] setActive:YES error:nil];

    AVAudioPlayer *av = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"Tock" ofType:@"mp3"]] error:nil];
    [av setVolume:1.0];
    [av setNumberOfLoops:0];
    [av prepareToPlay];
    [av play];


【讨论】:

不幸的是,这对我不起作用,我应用了您的实现,它不适用于模拟器,也不适用于设备。此外,在设备上,点击任何按钮都会引入明显的延迟。但我仍然感谢您在这里的意见。谢谢。 @EvanChu 设备是否处于静音状态? 是的,我确保我能听到系统键盘的提示音,然后尝试我自己的。【参考方案5】:

播放声音需要 OpenAccess,我不知道为什么 Apple 会这样做,但现在就是这样。这也将解决延迟和尝试播放声音后无法正常工作的问题。

您可以通过在键盘的 info.plist 中将 RequestsOpenAccess Key 的值设置为 YES 来获取 OpenAccess。

接下来您应该将 AudioToolbox 导入您的项目,然后使用以下代码:

- (void)playSound
NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"Tock" ofType:@"caf"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);
AudioServicesPlaySystemSound (soundID);

现在安装您的键盘并在将其添加到您的键盘时提供 Openaccess,它应该可以工作。

【讨论】:

【参考方案6】:

你可以使用playInputClick()方法。

斯威夫特:

UIDevice.currentDevice().playInputClick()

目标-C:

[[UIDevice currentDevice] playInputClick];

详情请见documentation。

【讨论】:

这是否适用于自定义键盘扩展?

以上是关于点击自定义键盘按钮时如何播放铃声的主要内容,如果未能解决你的问题,请参考以下文章

在自定义键盘扩展中播放标准 iOS 键盘点击声音

当点击 UITextField 时,加载 nib 文件以充当自定义键盘

如何使用应用内自定义键盘的按钮输入文本

iOS自定义键盘制作删除所有按钮

播放声音的 iOS 8 自定义键盘

工具或自定义键盘的位置在哪?