20

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,但结果是一样的。我想禁用振动的原因是因为我正在制作一个应用程序,用户必须将她的手机放在很远的地方,并且手机不应该因振动而翻倒。

4

2 回答 2

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

于 2013-03-29T06:28:33.900 回答
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);
于 2013-03-26T10:07:24.283 回答