Setting sounds for local notifications on a 3G iPhone running iOS4
I have successfully scheduled local notifications in my app using the code below:
Class cls = NSClassFromStri开发者_如何学运维ng(@"UILocalNotification");
if (cls != nil) {
UILocalNotification *notification = [[cls alloc] init];
notification.fireDate = self.alarmNotificationDate;
notification.timeZone = [NSTimeZone defaultTimeZone];
notification.alertBody = @"Alarm is due";
notification.alertAction = @"Show Alarm";
notification.soundName = @"alarm.mp3";
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
[notification release];
Where self.alarmNotificationDate is a NSDate assign in another method.
All works fine in the simulator, but when I test on my trusted old iPhone 3G running iOS4 I get the notification, but only with the default sound.
I have tried with different sound files but no success.
Any clue why it could be like this and how to correct it?
Thanks
UILocalNotification does not support mp3. It only supports the formats and containers mentioned on the reference page.
http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html
Because custom alert sounds are played by the iOS system-sound facility, they must be in one of the following audio data formats:
Linear PCM MA4 (IMA/ADPCM) µLaw aLaw
You can package the audio data in an aiff, wav, or caf file.
There could be a couple of reasons:
- Is your sound file included in your bundle? (most likely, seeing as it works on the simulator)
- The Apple documentation says to not use compressed audio formats. See the link here. The reason for this being that the iPhone hardware can only play one compressed audio file at a time, and so it is not recommended to use one for the alarm as well, in case the user is already listening to a song from iTunes.
Did you spell the name of the sound using the same upper/lower case encoding in both the file name and the filename?
精彩评论