簡體   English   中英

為什么后台中的函數沒有被調用?

[英]Why is the function in the background not being called?

我有一個程序可以在itunes應用程序上記錄當前播放歌曲的歌曲名稱和藝術家,但是當我單擊主屏幕按鈕時,該應用程序不再記錄標題或藝術家。 后台功能起作用是因為單擊主按鈕時測試功能起作用,但是由於某種原因getNowPlayingItem無法起作用。 我該如何解決?

  var musicPlayer = MPMusicPlayerController.systemMusicPlayer()

  func applicationDidEnterBackground(application: UIApplication) {
    print("entered background")

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "getNowPlayingItem", name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification, object: nil)
    musicPlayer.beginGeneratingPlaybackNotifications()


    test()
}

func test(){
      print("Background function working")
        }

func getNowPlayingItem() {
    if  let nowPlaying = musicPlayer.nowPlayingItem  {
        let title = nowPlaying[MPMediaItemPropertyTitle] as? String
        let artisttest = nowPlaying[MPMediaItemPropertyTitle]
        if let artist = nowPlaying[MPMediaItemPropertyArtist] as? String{

            let objectPointer = PFObject(className: "Pointer")
            let object = PFObject(className: "MasterSongs")

            //    print("Artist: " + artist)


            let query = PFQuery(className: "Pointer")
            query.findObjectsInBackgroundWithBlock({
                (objects: [AnyObject]?, error: NSError?) -> Void in
                var objectIDs = objects as! [PFObject]

                for i in 0...objectIDs.count-1{
                    self.Parsearray.append((objectIDs[i].valueForKey("title") as? String)!)

                    // print(self.Parsearray)
                }


                if self.Parsearray.contains(title!){
                    print("already in db")
                }else{
                    objectPointer["title"] = title
                    objectPointer["user"] = PFUser.currentUser()
                    objectPointer["artist"] = artist
                    objectPointer.saveInBackground()


                }

            })




        }else{
            let object = PFObject(className: "MasterSongs")
            object.setObject(title!, forKey: "title")
            //object.setObject(artist!, forKey: "artist")
            object.saveInBackground()

            let objectPointer = PFObject(className: "Pointer")


            let query = PFQuery(className: "Pointer")
            query.findObjectsInBackgroundWithBlock({
                (objects: [AnyObject]?, error: NSError?) -> Void in
                var objectIDs = objects as! [PFObject]

                for i in 0...objectIDs.count-1{
                    self.Parsearray.append((objectIDs[i].valueForKey("title") as? String)!)

                    // print(self.Parsearray)
                }


                if self.Parsearray.contains(title!){
                    print("already in db")
                }else{
                    objectPointer["title"] = title
                    objectPointer["user"] = PFUser.currentUser()
                    objectPointer["artist"] = "No artist found :("
                    objectPointer.saveInBackground()


                }

            })





        }


    }


}

通過這種方式,您可以運行后台任務,並讓其存活3分鍾。 僅在應用程序進入后台時啟動此程序。

var backgroundTask:UIBackgroundTaskIdentifier? backgroundTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ () -> Void in UIApplication.sharedApplication().endBackgroundTask(self.backgroundTask!) self.backgroundTask = UIBackgroundTaskInvalid })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM