2014-04-30 3 views
3

특정 기간에 노래 듣기 시간을 얻고 싶습니다. 사용 MPMediaItemPropertyLastPlayedDate 나는 노래가 마지막으로 연주 된 날짜 만받습니다. 따라서 하루에 여러 번 노래를 연주하면 마지막 시간 만 계산됩니다. 기본적으로 내가 원하는 것은 특정 기간 (예 : 지난 2 일간)에 사용자의 듣기 기록을 얻는 것입니다. MPMediaItemPropertyPlayCount도 전체 재생 횟수를받습니다.MPMediaItem (노래) 청취 시간 (날짜)을 얻는 방법

아이디어가 있으십니까?

감사합니다.

답변

1

MPMediaItem의 지속 시간을 가져 오는 데 사용합니다.

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

나는 각 음악 아이템의 재생 시간과 날짜 대신에 재생 시간과 날짜에 관심이 없습니다 – user3350794

1

저는 지금 당장이 작업을하고 있습니다. 내 (스위프트 코드)입니다 : 키 라인이 쿼리에 할당, 노래와 노래, 다음 lastPlayedDate에 대한 검사가 비록

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는 nil 일 수 있습니다 (전에이 노래를 연주하지 않았습니다).

이 코드는 전체 라이브러리 5K 곡의 전체 검사를 수행하며 약 3 초가 걸립니다. 제 경우에는 "이후"이후로 나의 플레이 기록에만 관심이 있습니다

+0

PS. 죄송합니다. 저는이 회신으로 1 년 늦었습니다.하지만 저는 오늘이 일을 시작했습니다. 당신은 이미 이것을 알아 냈을지도 모릅니다. 인터넷에서 여러 가지 방법을 찾지 못 했으므로 누군가에게 도움이 될 수 있습니다. –