美文网首页
添加系统提示音

添加系统提示音

作者: Ice丶泽 | 来源:发表于2017-03-22 12:00 被阅读0次

直接上步骤~
声音文件在这儿下载

1.引入头文件

#import <AVFoundation/AVFoundation.h>

2.声明全局的变量

/**
 设置两次响的时间最小时间间隔
 */
static const CGFloat kDefaultPlaySoundInterval = 3.0;
/**
 用于存储最后一次响声的时间
 */
@property (strong, nonatomic) NSDate *lastPlaySoundDate;

3.系统声音的添加以及播放

- (void)playSoundAndVibration{
    NSTimeInterval timeInterval = [[NSDate date]
                                   timeIntervalSinceDate:self.lastPlaySoundDate];
    if (timeInterval < kDefaultPlaySoundInterval) {
        //如果距离上次响铃和震动时间太短, 则跳过响铃
        NSLog(@"skip ringing & vibration %@, %@", [NSDate date], self.lastPlaySoundDate);
        return;
    }

    //保存最后一次响铃时间
    self.lastPlaySoundDate = [NSDate date];

    // 收到消息时,播放音频
    [self playNewMessageSound];
}
/**
 *  系统铃声播放完成后的回调
 */
void EMSystemSoundFinishedPlayingCallingback(SystemSoundID sound_id, void* user_data)
{
    AudioServicesDisposeSystemSoundID(sound_id);
}
// 播放接收到新消息时的声音
- (SystemSoundID)playNewMessageSound
{
    // 要播放的音频文件地址
    NSURL *audioPath = [[NSBundle mainBundle] URLForResource:@"in" withExtension:@"caf"];
    // 创建系统声音,同时返回一个ID
    SystemSoundID soundID;
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)(audioPath), &soundID);
    // Register the sound completion callback.
    AudioServicesAddSystemSoundCompletion(soundID,
                                          NULL, // uses the main run loop
                                          NULL, // uses kCFRunLoopDefaultMode
                                          EMSystemSoundFinishedPlayingCallingback, // the name of our custom callback function
                                          NULL // for user data, but we don't need to do that in this case, so we just pass NULL
    );

    AudioServicesPlaySystemSound(soundID);

    return soundID;
}

相关文章

网友评论

      本文标题:添加系统提示音

      本文链接:https://www.haomeiwen.com/subject/crhonttx.html