2015-12-02 141 views
0

我有一个程序会记录当前正在播放的歌曲,但我希望应用程序在后台运行,所以当用户在不同的应用程序中或设备被锁定时,我的应用程序在后台,到下一首歌,节目就会知道。目前,我可以将当​​前正在播放的歌曲放到应用程序打开时进行解析。如何让程序在后台运行?

 func applicationDidEnterBackground(application: UIApplication) { 
    print("entered background") 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "getNowPlayingItem", name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification, object: nil) 
    musicPlayer.beginGeneratingPlaybackNotifications() 
} 

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() 


       } 

      }) 





     } 


    } 


} 

回答

2

Apple支持一些背景模式。如果您使用任何Apple音频播放框架,请选择您的应用程序目标并进入Capabilites选项并启用后台模式并选择适当的选项。

检查截图。 enter image description here

+0

所以我想我知道什么是错的,我打电话在视图中的功能会出现,因为应用程序将在后台运行viewWillAppear将不会被调用,除非应用程序打开,你的方法会解决这个问题? – tman0542

+0

只需启用回答中提到的背景模式,然后测试您的代码。 – Muneeba

+0

不,它不起作用。我也将它添加到plist http://puu.sh/lGm9b/3459d6f072.png – tman0542