Как запустить аудиоплеер, нажав кнопку воспроизведения на кнопке действия UNUserNotification, когда приложение неактивно? - PullRequest
0 голосов
/ 16 декабря 2018

Привет, у меня есть приложение аудиоплеера, в котором есть секция таймера. Цель состоит в том, чтобы запускать / останавливать звук в определенную дату и время.Я реализовал это, используя UNUserNotificationCenter. Это нормально работает, когда приложение находится на переднем плане. Но когда приложение неактивно / фон , проигрыватель будет играть, только если приложение открыто и выведено на передний план. Может кто-нибудьпомоги мне с этим.

     func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    completionHandler([.alert, .badge, .sound])
}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    print("Local notification received")

    let application = UIApplication.shared
    print(response.notification.request.content)

    let identifier = response.actionIdentifier
    let request = response.notification.request

    if(identifier == "StartPlaying")
    {
        AudioManager.sharedInstance.setAudioPlayer(audioUrl: "http://athmaraksha.org/admin/uploads/audio/040D-Daivathinte Vagdhanangal-329.mp3", fromAudio: true)
        AudioManager.sharedInstance.player?.play()


    }
    else if(identifier == "StopPlaying")
    {
        AudioManager.sharedInstance.player?.pause()

    }

    completionHandler()


}

1 Ответ

0 голосов
/ 16 декабря 2018

Конечно, есть несколько способов сделать это.Один из способов, который я предпочитаю, и довольно простой, - это использовать глобальный синглтон.

Таким образом, проблема заключается в обработке данных из push-уведомлений при перезапуске приложения из фона, верно?

В методе func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) мы обрабатываем push-уведомления, верно?

У меня есть способ проверить, могу ли я нажать или представить экран в данный момент (например, приложение полностью открыто, ине перезапускаясь с фона).Если нет способа нажать или представить экран, потому что приложение просто перезапускается из фона (то есть пользователю пока не представлены экраны), то я бы сохранил данные в тот глобальный синглтон, который я упомянул выше.

А когда корневой или домашний экран только что полностью загрузился, это означает, что мы готовы проверить, есть ли сохраненные данные из push-уведомления, и именно тогда мы будем готовы сделать любые изменения пользовательского интерфейса илипредставление / нажатие экранов на основе push-уведомлений.

Надеюсь, эта идея поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...