显示UIAlertView时播放本地通知默认声音?
我正在写一个iPhone的提醒应用程序,显示使用本地通知提醒。
如果在应用程序运行时提醒消失,则不会显示本地通知。 相反,我的应用程序委托中调用了didReceiveLocalNotification
方法,并通过显示带有提醒文本的UIAlertView
模拟本地通知对话框。
当本地通知显示在应用程序外部时,设备会振动并播放由UILocalNotificationDefaultSoundName
指定的声音。 同样,我想在显示UIAlertView
时在应用程序中模仿这个。
我可以通过调用AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
振动设备,但我不知道如何播放本地通知默认声音。 没有等效的SystemSoundID常量,我不确定path是什么。
tl; dr在显示UIAlertView时,我想播放本地通知的默认声音。 有任何想法吗?
好问题。 理想情况下,会有一种使用AudioServicesselect系统声音的方法。 但是,苹果公司的“系统声音服务参考”中的以下声明表明:
在Mac OS X中,当用户configuration了“系统偏好设置”以闪烁警报屏幕,或者声音无法渲染时,调用此function将导致屏幕闪烁。 在Mac OS X中,传递常量kSystemSoundID_UserPreferredAlert以播放用户在“系统偏好设置”中select的警报声音。 在iOS中没有首选的用户警报声音。
由于SDK似乎没什么可提供,所以您可能希望使用自己的wav文件来模拟系统声音。 在下面的链接中有一个很好的库,也许它会有你要找的声音: http : //sites.google.com/site/iphonesounds/iPhoneOriginalSystemSounds_WAV.zip
祝你好运!
您可以通过以下方式播放默认的通知声音:
AudioServicesPlaySystemSound(1315);
在此链接中,您可以find可用作AudioServicesPlaySystemSound(id)参数的id的列表。
好的编码!
在.h文件中设置委托:
@interface ViewController : UIViewController <UIAlertViewDelegate> { } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex; @end
并设置上面声明的方法。
在.m文件中做到这一点:
- (void)viewDidLoad { [super viewDidLoad]; NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/ma.mp3", [[NSBundle mainBundle] resourcePath]]]; NSError *error; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"message" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; audioPlayer.numberOfLoops = -1; [audioPlayer play]; [alert show]; } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ if (buttonIndex==0) { [audioPlayer stop]; } NSLog(@"U HAVE CLICKED BUTTON"); }
这是除了安德鲁小答案。
为了更好地模拟通知声音,您还应该configurationaudio会话:
AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryAmbient withOptions:AVAudioSessionCategoryOptionDuckOthers error:nil];
例如当你听音乐并在此期间获得通知时,这是至关重要的。
上面的会话参数看起来与通知在后台应用程序触发时播放的声音相同:
- 音乐在通知声音之前沉默,并恢复。
- 设备静音开关处理正确 – 仅在开关打开时播放声音
- 音量是相同的(注意,如果您在后台应用程序中使用系统声音并从Andrew Little中获得文件,则可能会获得不同的音量)