So che ci sono molte domande su SOF, ma questa è la "più nuova". Il fatto è che sto cercando di creare un'app di allarme e so per certo che ci sono app di allarme che funzionano perfettamente (in qualche modo), anche se l'app non è in esecuzione e si trova in background.iOs 8, avvia la riproduzione del suono quando sullo sfondo, sveglia app
La mia domanda è: come si inizia a riprodurre il suono dopo l'app è già in background ??
UILocalNotification è grande, ma si otterrà solo application:(_:didReceiveLocalNotification:)
dopo che l'utente ha già fatto clic sul vostro notifica, in modo da giocare il suono usando AVAudioPlayer non ha funzionato, voglio giocare il suono indipendentemente resistere l'utente fa clic su di esso o doesn' t. Naturalmente con Required background modes: App plays audio or streams audio/video using AirPlay
in info.plist
già impostato. Una volta che la musica inizia a suonare, continua a suonare anche se vado in background.
Non voglio usare UILocalNotificaation coz è limitato a 30 secondi e solo in grado di riprodurre i suoni che sono in bundle con l'applicazione.
Eventuali approfondimenti? pensieri ??
codice di esempio:
var notif = UILocalNotification()
notif.fireDate = self.datePicker.date
notif.alertBody = "test"
UIApplication.sharedApplication().scheduleLocalNotification(notif)
il codice di cui sopra viene chiamato quando l'utente seleziona e allarme e fa clic su Salva.
e qui è quello che sta accadendo in AppDelegate:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
NSLog("launched")
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert |
UIUserNotificationType.Badge, categories: nil
))
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)
self.sound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("sound", ofType: "caf"))
self.audioPlayer = AVAudioPlayer(contentsOfURL: sound, error: nil)
return true
}
func application(application: UIApplication!, didReceiveLocalNotification notification: UILocalNotification!){
audioPlayer.play()
NSLog("received local notif")
}
È necessario tenere un forte riferimento alla AVAudioPlayer
btw, in modo da non ottenere rilasciato, e il audioplayer.play()
non farà nulla ...
se la vostra applicazione è in background, 'didreceivelocalnotification' dovrebbe essere chiamato dopo la notifica licenziata. Forse puoi inserire il tuo codice laggiù per riprodurre il suono. – Chris
l'ho provato molte volte, non lo fa, viene generato solo dopo che l'utente ha effettivamente cliccato sulla notifica. Modificherò comunque la mia domanda. – Nour1991