2011-07-01 13 views
5

Estoy intentando construir un reloj de alarma similar al Alarm Clock Pro y la aplicación Nightstand que se encuentran actualmente en la tienda de aplicaciones. Cada una de estas aplicaciones puede reproducir un sonido de alarma por más de 30 segundos cuando se toca la hora de la alarma (generalmente a la mañana siguiente).¿cómo reproduzco un sonido de alarma por más de 30 segundos como la aplicación pro reloj de alarma?

He intentado dos enfoques ya sin suerte:

Enfoque 1:

[self performSelector:@selector(playAlarm) withObject:nil afterDelay:myDouble]; 

Enfoque 2:

  UILocalNotification *notif = [[cls alloc] init]; 
    notif.fireDate =[datePicker date];//firedate; 
    notif.timeZone = [NSTimeZone systemTimeZone]; 

    notif.alertBody = @"Time to wake up!"; 
    NSString *SoundFileName=nil; 
    if([[[NSUserDefaults standardUserDefaults] objectForKey:@"ActualSoundFile"] isKindOfClass:[NSString class]]) 
     SoundFileName=[[[NSString alloc]initWithString:[[NSUserDefaults standardUserDefaults]objectForKey:@"ActualSoundFile"]]autorelease]; 
    else 
     SoundFileName=[[[NSString alloc] initWithString:@""] autorelease]; 

    if([SoundFileName length]>1) 
     notif.soundName = [SoundFileName stringByAppendingString:@".wav"]; 
    else 
     notif.soundName = UILocalNotificationDefaultSoundName; 

    [email protected]"Snooze"; 
    notif.repeatCalendar=[NSCalendar currentCalendar]; 
    notif.repeatInterval =NSDayCalendarUnit; 

    NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"Alarm" forKey:kRemindMeNotificationDataKey]; 

      notif.userInfo = userDict; 

    [[UIApplication sharedApplication] scheduleLocalNotification:notif]; 
    [notif release]; 

¿Alguien sabe cómo son capaz de reproducir la alarma en un bucle después de 7 horas?

+0

Para Approach 2, ¿es eso todo su código? Definitivamente necesitas más código después de esa línea. –

+0

@Ben - Acabo de agregar los dos enfoques. – daSn0wie

Respuesta

1

Necesitas disparar la notificación local mediante la asignación de la fecha en propiedad fireDate, y asignar archivo de sonido en

UILocalNotification *localNotif = [[[UILocalNotification alloc] init]autorelease]; 
localNotif.fireDate = scheduleDate; 
NSLog(@"fireDate is %@",localNotif.fireDate); 
localNotif.timeZone = [NSTimeZone defaultTimeZone]; 
localNotif.alertBody = @"WAKE UP...!!!"; 
localNotif.alertAction = @"View"; 
localNotif.soundName = @"Default.wav"; 


[[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; 

De esta manera, la notificación local se disparó incluso si la aplicación está cerrada, recuerda que "Default.wav" el archivo debe ser menor o igual a 30 segundos, incluso la aplicación Alarm Clock Pro reproduce el sonido = 30 segundos en la notificación local.

Si la aplicación está vivo, se puede implementar el método delegado de AppDelegate, y puede aplicar la lógica para mostrar la vista alerta y reproducir sonido incluso> 30 segundos .....

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
} 
+0

¿cómo se mantiene la aplicación 'viva'? cuando dejo mi aplicación en funcionamiento y me voy a dormir, el sonido solo se reproduce durante 30 segundos. La aplicación del despertador reproduce el sonido hasta que realmente me despierto y hago una acción del usuario. – daSn0wie

-2

Así que creo que he encontrado una solución válida:

Para simular el sonido de la alarma que se reproduce durante más de 30 segundos, simplemente agregue múltiples localnotifications uno después de otro, con 30 segundos de diferencia.

+1

Esta no es la respuesta correcta, porque el usuario puede despertarse durante la primera notificación y elegir cerrarla. Adivina qué, aparece la segunda notificación que le da al usuario la impresión de que la alarma está rota. – MyCSharpCorner

+0

Eso necesita ser manejado por la aplicación.una vez que se selecciona la alerta, debe cancelar todas las demás notificaciones locales – daSn0wie

+1

Esta no es una solución correcta –

5

La respuesta seleccionada no es la correcta, porque el usuario puede despertarse durante la primera notificación y elegir cerrarla. Adivina qué, aparece la segunda notificación que le da al usuario la impresión de que la alarma está rota.

La respuesta correcta de acuerdo con la aplicación de Google Docs es el siguiente:

No se puede reproducir un sonido más de 30 segundos cuando llega su notificación, mientras que su aplicación es en el fondo (por ejemplo, usuario cierra la aplicación antes de ir a dormir)

Para reproducir un sonido más largo, debe decirle a su usuario que deje la aplicación de alarma en primer plano antes de irse a dormir, y luego en didReceiveLocalNotification que implementa reproduciendo un sonido más largo manualmente.

+0

esto no es correcto. puede implementar el mismo sonido tantas veces como desee en orden sucesivo a intervalos de 30 segundos. la persona que escribe la aplicación debe borrar las notificaciones sucesivas que se establecen una vez que el usuario se involucra. – daSn0wie

+0

Cuando el sistema presenta su notificación mientras su aplicación finaliza o se suspende en segundo plano, hay dos opciones: "Cerrar" y otro botón. Al tocar el botón Cerrar no se notifica a tu aplicación para que no puedas borrar notificaciones sucesivas como dices. Como resultado, el usuario seguirá obteniendo esas alarmas de 30 segundos que programó aunque elijan Cerrar cada vez. En mi opinión, esta es una experiencia bastante confusa para el usuario. – MyCSharpCorner

+0

puede llevar al usuario a su aplicación en el punto en que ejecuta: [[UIApplication sharedApplication] cancelAllLocalNotifications]; – daSn0wie

Cuestiones relacionadas