5

特定の期間の曲の再生時間を取得したい。Iを使用するMPMediaItemPropertyLastPlayedDateと、曲が最後に再生された日付のみが取得されるため、I が 1 日に複数回曲を再生した場合、最後の時間のみがカウントされます。基本的に、私がやりたいことは、特定の期間 (たとえば過去 2 日間) のユーザーのリスニング履歴MPMediaItemPropertyPlayCountを取得することです。また、全体の合計再生回数も取得します。

何か案は?

ありがとう。

4

2 に答える 2

2

私は今これに取り組んでいます。私の(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」以降のプレイ履歴のみに関心があります。

于 2015-05-24T01:06:13.190 に答える
1

これを使用して、MPMediaItem の長さを取得します。

MPMediaItem *song;
NSNumber *duration= [song valueForProperty:MPMediaItemPropertyPlaybackDuration];
于 2014-05-01T00:39:02.850 に答える