如何在没有振动的iOS上播放系统声音?

时间:2013-03-19 23:50:18

标签: iphone ios cocoa-touch

AudioServicesPlayAlertSound的文档中,它说我可以在播放声音时禁用振动:

  

iPhone播放指定的声音。如果用户已配置   环上振动的设定应用也会引起振动。   但是,如果您的应用的音频会话是,设备不会振动   配置AVAudioSessionCategoryPlayAndRecord 或   AVAudioSessionCategoryRecord音频会话类别。

然而,即使将我的类别设置为“播放和录制”后,我仍然感觉到我的iPhone 4S(iOS 5.1.1)出现了震动。它同时响起并振动。

#import <AudioToolbox/AudioServices.h>
#import <AVFoundation/AVAudioSession.h>

NSError* error;
[[AVAudioSession sharedInstance]
    setCategory:AVAudioSessionCategoryPlayAndRecord
    error:&error];
if (error == nil) {
    AudioServicesPlayAlertSound(1000);
}

我也试过AudioServicesPlaySystemSound,但结果是一样的。我想要禁用振动的原因是因为我正在制作一个应用程序,用户必须将手机放在远处,手机不应因振动而翻倒。

2 个答案:

答案 0 :(得分:8)

我用我的iPhone 4s进行了测试,它完全符合您的要求。

   NSError* error;
    [[AVAudioSession sharedInstance]
     setCategory:AVAudioSessionCategoryPlayAndRecord
     error:&error];
    if (error == nil) {
        SystemSoundID myAlertSound;
        NSURL *url = [NSURL URLWithString:@"/System/Library/Audio/UISounds/new-mail.caf"];
        AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &myAlertSound);

        AudioServicesPlaySystemSound(myAlertSound);

    }

使用AudioServicesCreateSystemSoundID使用系统声音的文件名创建SystemSoundID。然后使用AudioServicesPlaySystemSound()播放没有振动的声音。其他系统声音的文件名可以在下面的链接中找到。

http://iphonedevwiki.net/index.php/AudioServices

答案 1 :(得分:3)

您是否尝试过播放自己的声音效果而不是Apple内置的声音效果?

如果您在应用中上传音频文件,则可以使用AudioToolBox框架轻松使用它 而你不必再担心振动了。

#import <AudioToolbox/AudioServices.h>    

//Initialise your soundID (your app delegate is a good place for this)    
SystemSoundID soundToPlay;

NSString *path  = [[NSBundle mainBundle] pathForResource:@"<YourFileName>" ofType:@"aif"];
NSURL *pathURL = [NSURL fileURLWithPath : path];
AudioServicesCreateSystemSoundID((__bridge CFURLRef) pathURL, &soundToPlay);

//playback
AudioServicesPlaySystemSound(soundToPlay);