我想知道什么时候在音乐应用上播放一首歌并获取其信息。但我不想从图书馆获取所有歌曲,这只是自应用开始扫描以来播放的歌曲。
就像你玩的东西,然后你打开应用程序,它扫描你播放的内容。
我正在搜索这个,但一无所获,我不知道从哪里开始实现这个。
答案 0 :(得分:2)
首先,将Info.plist
密钥添加到import MediaPlayer
@IBAction func getSongs(_ sender: Any) {
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: Calendar.current.startOfDay(for: Date()))!
// Check for permissions
switch MPMediaLibrary.authorizationStatus() {
case .authorized, .restricted:
fetchSongPlayed(since: yesterday)
case .notDetermined:
MPMediaLibrary.requestAuthorization { _ in
let auth = MPMediaLibrary.authorizationStatus()
if auth == .authorized || auth == .restricted {
self.fetchSongPlayed(since: yesterday)
}
}
case .denied:
print("No access to the Media Library")
}
}
func fetchSongPlayed(since date: Date) {
let query = MPMediaQuery.songs()
var results = [MPMediaItem]()
if let songs = query.items {
results = songs.filter { ($0.lastPlayedDate ?? Date.distantPast) > date }
} else {
print("Can't fetch songs")
}
// Now do whatever you want with results
// It's an array of MPMediaItem
print(results.count)
}
,并说明您需要访问用户媒体库的原因
然后您可以使用以下代码找到自某段时间以来播放的所有歌曲:
export default MyComponent // import MyComponent
export MyComponent // import { MyComponent }
还有一个提示:将一些音乐从iTunes同步到您的设备,因为模拟器没有任何默认值。模拟器有http://us3.php.net/manual/en/language.oop5.object-comparison.php#98725,但在设备上测试更容易。