Play local notification default sound when displaying UIAlertView?

28,411

Solution 1

Good question. Ideally, there would be a way of selecting a system sound using AudioServices. However, the following statement from Apple's "System Sound Services Reference" suggests otherwise:

In Mac OS X, when a user has configured System Preferences to flash the screen for alerts, or if sound cannot be rendered, calling this function will result in the screen flashing. In Mac OS X, pass the constant kSystemSoundID_UserPreferredAlert to play the alert sound selected by the user in System Preferences. In iOS there is no preferred user alert sound.

Since it seems like the SDK has little to offer, you might wish to mimick the system sounds by using your own wav file. There is a nice library at the following link, perhaps it will have the sound you're looking for: http://sites.google.com/site/iphonesounds/iPhoneOriginalSystemSounds_WAV.zip

Good luck!

Solution 2

You can play the default notification sound in this way:

AudioServicesPlaySystemSound(1315);

Here you'll find the list of the ids you can use as parameter of AudioServicesPlaySystemSound(id).

Good coding!

Solution 3

This is addition to Andrew Little answer.

To better mimic notification sound, you also should to configure audio session:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryAmbient withOptions:AVAudioSessionCategoryOptionDuckOthers error:nil];

This is essential when e.g. you listen to the music and obtain notification during this.

Parameters of session above looks the same as for sound played when notification fires with application in background:

  • music is silenced before and resumed after notification sound.
  • device silence switch is handled correctly - sound is played only when switch is on
  • volume is the same (note you may obtain different volume if you use system sound when application in background and files from Andrew Little answer)
Share:
28,411
nickpatrick
Author by

nickpatrick

Updated on July 09, 2022

Comments

  • nickpatrick
    nickpatrick almost 2 years

    I'm writing a reminders app for iPhone that displays reminders using local notifications.

    If a reminder goes off while the application is running, the local notification isn't displayed. Instead, the didReceiveLocalNotification method is called in my app delegate, and I mimic the local notification dialog by displaying a UIAlertView with the reminder text.

    When local notifications are displayed outside of the app, the device vibrates and the sound specified by UILocalNotificationDefaultSoundName is played. Again, I'd like to mimic this in the app when displaying the UIAlertView.

    I can vibrate the device by calling AudioServicesPlaySystemSound(kSystemSoundID_Vibrate), but I can't figure out how to play the local notification default sound. There's no equivalent SystemSoundID constant, and I'm not sure what the path would be.

    tl;dr I'd like to play the local notification default sound when displaying a UIAlertView. Any ideas?

  • nickpatrick
    nickpatrick over 13 years
    Good find. That seems to be a reasonable alternative and it's probably the way I'll go. Thanks!
  • Abduliam Rehmanius
    Abduliam Rehmanius almost 13 years
    can this custom sound be really long like 30 seconds or so?
  • Camus
    Camus over 11 years
    Maximun of 30 sec otherwise the system will play the default sound
  • Cashew
    Cashew over 11 years
    @Camus wait, so if we wanted the default sound, can't we tell it to play a sound file longer than 30 seconds? Wouldn't that answer the OP's question?
  • EmptyStack
    EmptyStack about 11 years
    Hey! Anyone has used any of the sounds in your app and got sued by Apple for copying their sounds? Can I use them? :0
  • Harshil Shukla
    Harshil Shukla almost 11 years
    The sounds seems quieter than native sounds - I tried on iPhone 4S iOS 6
  • Radek
    Radek over 7 years
    import AudioToolbox to use it