J'écris une application de rappels pour iPhone qui affiche des rappels à l'aide de notifications locales.
Si un rappel se déclenche pendant que l'application est en cours d'exécution, la notification locale ne s'affiche pas. Au lieu de cela, la méthode didReceiveLocalNotification
est appelée dans mon délégué d'application et j'imite la boîte de dialogue de notification locale en affichant un UIAlertView
avec le texte de rappel.
Lorsque des notifications locales sont affichées en dehors de l'application, l'appareil vibre et le son spécifié par UILocalNotificationDefaultSoundName
est lu. Encore une fois, j'aimerais imiter cela dans l'application lors de l'affichage du UIAlertView
.
Je peux faire vibrer l'appareil en appelant AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
, mais je ne sais pas comment jouer le son par défaut de la notification locale. Il n'y a pas de constante SystemSoundID équivalente, et je ne sais pas quel serait le chemin d'accès.
tl; dr Je voudrais jouer le son par défaut de notification locale lors de l'affichage d'un UIAlertView. Des idées?
Bonne question. Idéalement, il y aurait un moyen de sélectionner un son système à l'aide d'AudioServices. Cependant, la déclaration suivante du "System Sound Services Reference" d'Apple suggère le contraire:
Sous Mac OS X, lorsqu'un utilisateur a configuré les Préférences Système pour faire clignoter l'écran pour les alertes, ou si le son ne peut pas être rendu, l'appel de cette fonction entraînera le clignotement de l'écran. Sous Mac OS X, transmettez la constante kSystemSoundID_UserPreferredAlert pour lire le son d'alerte sélectionné par l'utilisateur dans les Préférences Système. Dans iOS, il n'y a pas de son d'alerte utilisateur préféré.
Comme il semble que le SDK ait peu à offrir, vous souhaiterez peut-être imiter les sons du système en utilisant votre propre fichier wav. Il y a une belle bibliothèque sur le lien suivant, peut-être qu'elle aura le son que vous recherchez: http://sites.google.com/site/iphonesounds/iPhoneOriginalSystemSounds_WAV.Zip
Bonne chance!
Vous pouvez jouer le son de notification par défaut de cette manière:
AudioServicesPlaySystemSound(1315);
Dans ce lien vous trouverez la liste des identifiants que vous pouvez utiliser comme paramètre de AudioServicesPlaySystemSound (id).
Bon codage!
Définissez le délégué dans le fichier .h:
@interface ViewController : UIViewController <UIAlertViewDelegate>
{
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;
@end
Et définissez la méthode déclarée ci-dessus.
Et dans le fichier .m, procédez comme suit:
- (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");
}
Ceci est un ajout à la réponse d'Andrew Little.
Pour mieux imiter le son des notifications, vous devez également configurer la session audio:
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryAmbient withOptions:AVAudioSessionCategoryOptionDuckOthers error:nil];
Ceci est essentiel lorsque par ex. vous écoutez la musique et obtenez une notification pendant ce temps.
Les paramètres de la session ci-dessus sont identiques à ceux du son joué lorsque la notification se déclenche avec l'application en arrière-plan: