如何使用 Swift 3 iOS10 为 MPMediaPickerControllerDelegate 呈现带有视图控制器的音乐库?
Posted
技术标签:
【中文标题】如何使用 Swift 3 iOS10 为 MPMediaPickerControllerDelegate 呈现带有视图控制器的音乐库?【英文标题】:How Do I Present a Music Library With a View Controller for a MPMediaPickerControllerDelegate using Swift 3 iOS10? 【发布时间】:2016-09-24 13:25:42 【问题描述】:我正在尝试关注最近关于使用 MPMediaPickerControllerDelegate
呈现音乐选择列表的帖子。
教程位于此网址:
http://www.justindoan.com/tutorials/
我正在使用此代码:
import UIKit
import MediaPlayer
class ViewController: UIViewController, MPMediaPickerControllerDelegate
var mediapicker1: MPMediaPickerController!
override func viewDidLoad()
super.viewDidLoad()
let mediaPicker: MPMediaPickerController = MPMediaPickerController.self(mediaTypes:MPMediaType.music)
mediaPicker.allowsPickingMultipleItems = false
mediapicker1 = mediaPicker
mediaPicker.delegate = self
self.presentViewController(mediapicker1, animated: true, completion: nil)
但是我发现:
self.presentViewController(mediapicker1, animated: true, completion: nil)
不起作用。不幸的是,Swift 3 建议的自动解决方案也不起作用:
self.present(mediapicker1, animated: true, completion: nil)
此外,ios 10 Beta 发行说明,位于:
https://www.scribd.com/doc/315770725/IOS-10-Beta-Release-Notes
在 18 页的第 10 页上说,
MPMediaPickerController 对象可能无法按预期显示。
我花了很多时间试图自己解决这个问题,但没有成功。
有什么建议吗?
【问题讨论】:
您的链接是 beta 文档的镜像。您应该始终使用 Apple 的官方文档。 iOS 10 已发布且已结束测试版。 @George Lee,我最近在appstore 上发布了一个应用程序,它使用 Swift 3 为 MPMediaPickerControllerDelegate 提供带有视图控制器的音乐库。检查您是否有相同的要求,然后我可以帮助您详细信息(以及代码) @pkc456 那会很好。你能分享这篇文章的代码吗? @GeorgeLee,我已经在answer below 中编写了工作代码。我还提到了您的代码中的一些差异。我对想法持开放态度。 【参考方案1】:完成这些步骤:
-
将“NSAppleMusicUsageDescription”添加到您的 Info.plist 以获得隐私权。
确保您的音乐应用在您的 iPhone 中可用。它在模拟器中不起作用。
【讨论】:
plist 键NSAppleMusicUsageDescription
不是问题中的代码正常运行所必需的。
@JAL 在新的 iOS10 中,会出现一个空白视图。在 iPhone6 Plus、iOS10 测试。
这个答案是正确的。在 info.plist 中添加 NSAppleMusicUsageDescription 确实允许 MPMediaPickerDelegate 显示音乐列表。它将弹出一个隐私 - 媒体库使用类型:字符串,值:是。【参考方案2】:
根据我们对 cmets 的讨论,我最近在我的最新应用程序 named playmates 中使用了 MPMediaPickerController
。我正在与您共享工作代码。我已经编写了不言自明的代码。
import MediaPlayer
class viewControllerName: UIViewController,MPMediaPickerControllerDelegate
//Below is Inaction for picking music from media library
@IBAction func btnMediaPickerAction(_ sender: UIButton)
let mediaPicker: MPMediaPickerController = MPMediaPickerController.self(mediaTypes:MPMediaType.music)
mediaPicker.delegate = self
mediaPicker.allowsPickingMultipleItems = false
self.present(mediaPicker, animated: true, completion: nil)
// MPMediaPickerController Delegate methods
func mediaPickerDidCancel(_ mediaPicker: MPMediaPickerController)
self.dismiss(animated: true, completion: nil)
func mediaPicker(_ mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection)
self.dismiss(animated: true, completion: nil)
print("you picked: \(mediaItemCollection)")//This is the picked media item.
// If you allow picking multiple media, then mediaItemCollection.items will return array of picked media items(MPMediaItem)
我在您的代码中发现了以下差异:
使用self.present
而不是self.presentViewController
无需创建mediaPicker
的全局实例。在委托方法中,您将获得 MPMediaPickerController
的实例
【讨论】:
这仍然不允许我像以前在 iOS10 中那样选择一首歌曲(显示要选择的歌曲列表)。除非我错误地遵循了你的指示。 将NSAppleMusicUsageDescription
添加到您的 Info.plist。【参考方案3】:
在 info.plist 中添加隐私 - 媒体库使用说明
【讨论】:
以上是关于如何使用 Swift 3 iOS10 为 MPMediaPickerControllerDelegate 呈现带有视图控制器的音乐库?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 10.2 上的 Swift 3:如何从麦克风订阅单个样本?需要实时处理音频
我如何通过 swift 2.3 项目支持 iOS 版本 10.3
如何在 Xcode 8 和 iOS 10 中使用 AFNetworking 类和 Swift 3 上传图像