如何获取 MPMediaItem(歌曲)收听时间(日期)
Posted
技术标签:
【中文标题】如何获取 MPMediaItem(歌曲)收听时间(日期)【英文标题】:How to get MPMediaItem (song) listening times (dates) 【发布时间】:2014-04-30 21:44:58 【问题描述】:我想获取某段时间内歌曲的收听时间。使用MPMediaItemPropertyLastPlayedDate
,我只得到最后一次播放歌曲的日期,所以如果我每天多次播放歌曲,只有最后一次才算。
基本上,我想做的是在某个时期(例如最后两天)获取用户的收听历史。
还有MPMediaItemPropertyPlayCount
,我得到了总的播放次数。
有什么想法吗?
谢谢。
【问题讨论】:
【参考方案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 秒。就我而言,我只对“自从”以来的游戏历史感兴趣
【讨论】:
附言。抱歉,我的回复晚了大约一年,但我今天才开始处理这个问题。您可能已经自己弄清楚了。我没有在网上找到很多方法,所以这可能仍然对某人有所帮助【参考方案2】:使用它来获取 MPMediaItem 的持续时间。
MPMediaItem *song;
NSNumber *duration= [song valueForProperty:MPMediaItemPropertyPlaybackDuration];
【讨论】:
我对持续时间不感兴趣......而只是每个歌曲项目的播放时间和日期以上是关于如何获取 MPMediaItem(歌曲)收听时间(日期)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI 列表中显示 MPMediaItem 图稿?