首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取MPMediaItem (歌曲)收听时间(日期)

问如何获取MPMediaItem (歌曲)收听时间(日期)
EN

Stack Overflow用户
提问于 2014-05-01 05:44:58
回答 2查看 1.6K关注 0票数 4

我想知道某段时间内歌曲的收听时间。使用MPMediaItemPropertyLastPlayedDate,我只能得到歌曲最后一次播放的日期,所以如果我一天播放一首歌多次,那么只有最后一次会被计算在内。基本上,我想要做的是获取用户在一段时间内(例如最近两天)的收听历史。另外,对于MPMediaItemPropertyPlayCount,我得到了总的播放次数。

有什么想法吗?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-05-24 09:06:13

我现在正在做这件事。我的(Swift代码)是:

代码语言:javascript
复制
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秒。在我的例子中,我只对我的游戏历史感兴趣,因为“自”

票数 2
EN

Stack Overflow用户

发布于 2014-05-01 08:39:03

使用此选项可获取MPMediaItem的持续时间。

代码语言:javascript
复制
MPMediaItem *song;
NSNumber *duration= [song valueForProperty:MPMediaItemPropertyPlaybackDuration];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23398553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档