iOs 8, start playing sound when in the background, alarm clock app

I know there are many questions on SOF, but this is the “newest” one. The thing is, I’m trying to create and alarm app, and I know for a fact that there are alarm apps out there that works perfectly ( somehow ), even if the app is not running and is in the background.

My question is: how do you start playing sound after your app is already in the background ??

  • Sending audio from a Swift App to PHP Server, and somewhere the audio is lost
  • Local notification sound not working
  • Read data through iPhone audio jack
  • How do I play an m4a file in swift 2 upon the touch of a button?
  • Programmatically add content to music library
  • iOS SoundTouch framework BPM Detection example
  • UILocalNotification is great, but you’ll only get application:(_:didReceiveLocalNotification:) after the user has already clicked on your notification, so playing sound using AVAudioPlayer didn’t work, i want to play sound regardless weather the user clicks on it or doesn’t. Of course with Required background modes: App plays audio or streams audio/video using AirPlay in info.plist already set. Once the music starts playing, it keeps playing even if i go to the background.

    I don’t want to use UILocalNotificaation sound coz it’s limited to 30 secs and only the able to play the sounds that are bundled with the application.

    Any insights ? thoughts ??

    Sample code:

        var notif = UILocalNotification()
        notif.fireDate = self.datePicker.date
        notif.alertBody = "test"
        UIApplication.sharedApplication().scheduleLocalNotification(notif)
    

    the above code gets called when the user selects and alarm and clicks save.

    and here’s what’s happening 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")
    
    
    }
    

    You need to hold a strong reference to the AVAudioPlayer btw, so it won’t get released, and the audioplayer.play() won’t do anything…

    Solutions Collect From Internet About “iOs 8, start playing sound when in the background, alarm clock app”

    Finally, I managed to do it with NSTimer.

    func applicationWillResignActive(application: UIApplication) {
        var timer = NSTimer(fireDate: NSDate(timeIntervalSinceNow: 20), interval: 60.0, target: self, selector: Selector("playAlarm"), userInfo: nil, repeats: false)
        NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode)
    }
    func playAlarm() {
        self.sound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("sound", ofType: "caf"))
        self.audioPlayer = AVAudioPlayer(contentsOfURL: sound, error: nil)
        audioPlayer.play()
    }
    

    and somewhere else a UILocalNotification is synced with this timer, for a good user experience.

    Although I’m not sure if this would go through apple, but I don’t see any reason why it wouldn’t :\