如何获得MPMediaItem(歌曲)收听时间(日期)

时间:2014-04-30 21:44:58

标签: ios mpmediaitem mpmediaquery

我想在一段时间内听到歌曲的收听时间。使用MPMediaItemPropertyLastPlayedDate我只得到上次播放歌曲的日期,所以如果我每天多次播放一首歌,那么只有最后一次才会计算。 基本上,我想做的是在一定时期(例如最近2天)获取用户的收听历史记录。 同样使用MPMediaItemPropertyPlayCount我总得到了总的游戏次数。

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

使用它来获取MPMediaItem的持续时间。

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

答案 1 :(得分: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可以是nil(之前从未播放过这首歌)。

此代码正在对我的整个库5K歌曲进行全面检查,大约需要3秒钟。在我的情况下,我只对“自从”以来的游戏历史感兴趣