我有一個程序會記錄當前正在播放的歌曲的歌曲標題和藝術家在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()
}
})
}
}
}
當您的應用程序進入後臺時,它僅保留30秒。您必須創建後臺任務,這將有助於您的應用繼續工作3分鐘以上。 –
我該怎麼做,我可以讓應用程序在後臺運行超過3分鐘嗎? – tman0542
它會消耗太多的電池,這是蘋果沒有正式允許的原因,除非你像位置服務一樣使用框架。 (即使在位置服務運行等服務時,只能讓屏幕未鎖定時運行您的應用程序) –