第一步,声明一个SystemSoundID,最好是私有属性,因为我们只需要重复一个soundID:
@interface ViewController ()
{
SystemSoundID sound;
}
@end
第二步,使用AudioServicesCreateSystemSoundID获取一个soundID:
NSString *path = [[NSBundle mainBundle] pathForResource:@"ding" ofType:@"mp3"];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &sound);
*这里对铃声格式的要求没有搞清楚,应该是长度不超30s的都可以,大家可以自己尝试
第三步,写一个开始响铃的入口,并且添加SoundCompletion回调:
//开始响铃及振动
-(IBAction)startShakeSound:(id)sender{
AudioServicesPlayAlertSound(sound);
AudioServicesAddSystemSoundCompletion(sound, NULL, NULL, soundCompleteCallback, NULL);
}
//AudioServicesAddSystemSoundCompletion的回调函数
void soundCompleteCallback(SystemSoundID sound,void * clientData) {
AudioServicesPlayAlertSound(sound); //重复响铃震动
}
第四步,写一个结束响铃的方法:
//停止响铃及振动
-(IBAction)stopShakeSound:(id)sender{
AudioServicesDisposeSystemSoundID(sound);
AudioServicesRemoveSystemSoundCompletion(sound);
}
总结:看到网上很多人用计时器或者NSObject的performSelector方法实现,比较繁琐,直接使用alertsound和callback,简单四步就可以实现持续响铃。
网友评论