AirPlay允许用户跟踪iOS AirPlay可用性并提供了关于AirPlay连接的额外信息。
目前,这个库是一种解决方法,能够通过观察MPVolumeView
的变化来跟踪AirPlay可用性
。因此,需要每次iOS新版本发布时都要进行测试。
如果范围内有Apple TV或其他支持AirPlay的设备,路由按钮允许用户选择它。如果只有一个音频输出路由可用,则不会显示路由按钮。
请注意
当开发者为与私有API或封闭类(通过KVO)相关的方案(如我正在进行的“检测”AirPlay可用性)提供解决方案时,Apple通常停止支持这些属性,以推动开发者停止使用它们。
对于iOS 10+,似乎Apple已停止支持MPVolumeView
中的alpha
属性。因此,可能导致isAvailable
静态属性总是返回true
;我不确定,我需要深入挖掘并做更全面的QA。
如果发现任何问题,请告诉我。
通知 | 描述 |
---|---|
.airplayAvailabilityChangedNotification | 每当AirPlay可用性发生变化时发送通知。 |
.airplayRouteStatusChangedNotification | 每当AirPlay连接路由发生变化时发送通知。 |
属性 | 描述 |
---|---|
isAvailable | R返回true 或false ,如果有或没有设备可供AirPlay抛射。(只读) |
isBeingMonitored | R返回true 或false ,如果有或没有在监视AirPlay可用性。(只读) |
isConnected | R返回true 或false ,如果设备已通过AirPlay连接到第二个设备。(只读) |
已连接设备 | 如果已连接,则返回设备的名称;如果没有连接,则返回 nil 。(只读) |
方法 | 描述 |
---|---|
startMonitoring() | 开始监测 AirPlay 的可用性变化。 |
stopMonitoring() | 停止监测 AirPlay 的可用性变化。 |
闭包 | 描述 |
---|---|
whenAvailable | 当可以通过 AirPlay 播放媒体时,调用此闭包。 |
whenUnavailable | 当无法通过 AirPlay 播放媒体时,调用此闭包。 |
whenRouteChanged | 当路由变化时,调用此闭包。 |
我使用的方法是在 AppDelegate
中开始监测。它可以在任何地方实现。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
AirPlay.startMonitoring()
return true
}
添加它们
NotificationCenter.default.addObserver(
self,
selector: #selector(<selector>),
name: .airplayAvailabilityChangedNotification,
object: nil
)
NotificationCenter.default.addObserver(
self,
selector: #selector(<selector>),
name: .airplayRouteStatusChangedNotification,
object: nil
)
删除它们
NotificationCenter.default.removeObserver(
self,
name: .airplayAvailabilityChangedNotification,
object: nil
)
NotificationCenter.default.removeObserver(
self,
name: .airplayRouteStatusChangedNotification,
object: nil
)
当可用时
AirPlay.whenAvailable = { [weak self] in
<code>
}
当不可用时
AirPlay.whenUnavailable = { [weak self] in
<code>
}
当路由变化时
AirPlay.whenRouteChanged = { [weak self] in
<code>
}
AirPlay
可用性状态AirPlay.isAvailable
将返回 true
或 false
。
AirPlay
连接状态AirPlay.isConnected
将返回 true
或 false
。
AirPlay.connectedDevice ?? "未知设备"
我跳过了版本 2,只是为了与 Swift 语言版本相匹配。
通知命名。
.airplayAvailabilityChangedNotification
…原来是 AirPlayAvailabilityChangedNotification
。
.airplayRouteStatusChangedNotification
…原来是 AirPlayRouteStatusChangedNotification
。
属性命名。
AirPlay.isAvailable
…原来是 AirPlay.isPossible
。
闭包命名。
AirPlay.whenAvailable
…原来是 AirPlay.whenPossible
。
AirPlay.whenUnavailable
…原来是 AirPlay. whenNotPossible
。
AirPlay.whenRouteChanged
…原来是 AirPlay.whenConnectionChanged
。
AirPlay 可在 MIT 许可下获得。有关更多信息,请参阅 LICENSE 文件。