特定の期間の曲の再生時間を取得したい。Iを使用するMPMediaItemPropertyLastPlayedDate
と、曲が最後に再生された日付のみが取得されるため、I が 1 日に複数回曲を再生した場合、最後の時間のみがカウントされます。基本的に、私がやりたいことは、特定の期間 (たとえば過去 2 日間) のユーザーのリスニング履歴MPMediaItemPropertyPlayCount
を取得することです。また、全体の合計再生回数も取得します。
何か案は?
ありがとう。
特定の期間の曲の再生時間を取得したい。Iを使用するMPMediaItemPropertyLastPlayedDate
と、曲が最後に再生された日付のみが取得されるため、I が 1 日に複数回曲を再生した場合、最後の時間のみがカウントされます。基本的に、私がやりたいことは、特定の期間 (たとえば過去 2 日間) のユーザーのリスニング履歴MPMediaItemPropertyPlayCount
を取得することです。また、全体の合計再生回数も取得します。
何か案は?
ありがとう。
私は今これに取り組んでいます。私の(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 にすることができます (この曲を以前に再生したことがありません)。
このコードは、ライブラリ全体の 5,000 曲を完全にチェックしており、約 3 秒かかります。私の場合、「since」以降のプレイ履歴のみに関心があります。
これを使用して、MPMediaItem の長さを取得します。
MPMediaItem *song;
NSNumber *duration= [song valueForProperty:MPMediaItemPropertyPlaybackDuration];