AirPlay 3.0.1

AirPlay 3.0.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2017年9月
SwiftSwift版本3.0
SPM支持SPM

eMdOS维护。



AirPlay 3.0.1

AirPlay

AirPlay允许用户跟踪iOS AirPlay可用性并提供了关于AirPlay连接的额外信息。

开发环境

  • Xcode 8.2.1(8C1002)
  • iOS 8+
  • CocoaPods 1.2.0

支持

目前,这个库是一种解决方法,能够通过观察MPVolumeView的变化来跟踪AirPlay可用性。因此,需要每次iOS新版本发布时都要进行测试。

如果范围内有Apple TV或其他支持AirPlay的设备,路由按钮允许用户选择它。如果只有一个音频输出路由可用,则不会显示路由按钮。

请注意

当开发者为与私有API或封闭类(通过KVO)相关的方案(如我正在进行的“检测”AirPlay可用性)提供解决方案时,Apple通常停止支持这些属性,以推动开发者停止使用它们。

对于iOS 10+,似乎Apple已停止支持MPVolumeView中的alpha属性。因此,可能导致isAvailable静态属性总是返回true;我不确定,我需要深入挖掘并做更全面的QA。

如果发现任何问题,请告诉我。

使用

通知、属性、方法、闭包

通知

通知 描述
.airplayAvailabilityChangedNotification 每当AirPlay可用性发生变化时发送通知。
.airplayRouteStatusChangedNotification 每当AirPlay连接路由发生变化时发送通知。

属性

属性 描述
isAvailable R返回truefalse,如果有或没有设备可供AirPlay抛射。(只读)
isBeingMonitored R返回truefalse,如果有或没有在监视AirPlay可用性。(只读)
isConnected R返回truefalse,如果设备已通过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 将返回 truefalse

显示 AirPlay 连接状态

AirPlay.isConnected 将返回 truefalse

显示连接设备名称

AirPlay.connectedDevice ?? "未知设备"

从 v1.+ 迁移到 v3.+

我跳过了版本 2,只是为了与 Swift 语言版本相匹配。

更改

  • 通知命名。

    • .airplayAvailabilityChangedNotification

      …原来是 AirPlayAvailabilityChangedNotification

    • .airplayRouteStatusChangedNotification

      …原来是 AirPlayRouteStatusChangedNotification

  • 属性命名。

    • AirPlay.isAvailable

      …原来是 AirPlay.isPossible

  • 闭包命名。

    • AirPlay.whenAvailable

      …原来是 AirPlay.whenPossible

    • AirPlay.whenUnavailable

      …原来是 AirPlay. whenNotPossible

    • AirPlay.whenRouteChanged

      …原来是 AirPlay.whenConnectionChanged

作者

eMdOS

许可证

AirPlay 可在 MIT 许可下获得。有关更多信息,请参阅 LICENSE 文件。