2014-04-30 29 views
3

我想在某段時間內獲得歌曲的收聽時間。使用MPMediaItemPropertyLastPlayedDate我只能得到上一次播放歌曲的日期,所以如果我每天播放多首歌曲,只會最後一次計算。 基本上,我想要做的是獲取用戶在某段時間內的收聽歷史記錄(例如最後2天)。 同樣用MPMediaItemPropertyPlayCount我可以獲得總體播放總數。如何獲得MPMediaItem(歌曲)的收聽時間(日期)

任何想法?

謝謝。

回答

1

使用它可以獲得MPMediaItem的持續時間。

MPMediaItem *song; 
NSNumber *duration= [song valueForProperty:MPMediaItemPropertyPlaybackDuration]; 
+0

我對播放時間段不感興趣......而只是每首歌曲項目的播放時間和日期 – user3350794

1

我正在使用此權利。我(SWIFT代碼)是:

func getPlaysSince(since:NSDate, onSuccess: (tracks: [MediaItem])->(), onFail: (error: NSError?)->()) { 

    var rValue = [MediaItem]() 
    let timeInterval = since.timeIntervalSince1970 
    let query = MPMediaQuery.songsQuery() 
    let songs = query.items 
    Logger.logMessage(domain: "Data", level: .Minor, "Checking \(songs.count) songs for those since \(since)") 
    let then = NSDate() 
    for song in songs { 
     if let lastPlayedDate = song.lastPlayedDate { 
      if lastPlayedDate != nil { 
       if lastPlayedDate.timeIntervalSince1970 > timeInterval { 
        Logger.logMessage(domain: "Data", level: .Minor, "\(song.title) at \(lastPlayedDate)") 
        let item:MediaItem = MediaItem(mediaItem: song as! MPMediaItem) 
        rValue.append(item) 
       } 
      } 
     } 
    } 
    let taken = NSDate().timeIntervalSinceDate(then) 
    Logger.logMessage(domain: "Data", level: .Minor, "scanned in \(taken) seconds") 

    onSuccess(tracks: rValue) 

} 

我包括我的整個功能,但關鍵線是分配查詢,歌曲和歌曲,然後lastPlayedDate檢查。 lastPlayedDate可以爲零(以前從未播放過這首歌)。

此代碼正在對我的整個庫5K歌曲進行全面檢查,耗時約3秒。在我的情況下,我只對我的播放歷史感興趣,因爲「since」

+0

PS。對不起,我遲了一年這個答覆,但我今天才開始工作。你可能已經爲自己想出了這個。我沒有在網上找到很多的方法,所以這可能仍然有助於某人 –