作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我已经搜索了一段时间,想找到一种方法来确定 iOS 外部屏幕是通过电缆连接还是无线连接,但找不到任何明显的方法。
我看过非官方的 AirPlay 规范 HERE ,但看不到任何明显的检测方法。有谁知道这是否可以使用合法/“公共(public)”API 来完成。
最佳答案
是的,确实有办法。
在您应用的某处,创建一个 MPVolumeView
实例。在某些实例变量中坚持。您不必将它作为 subview 添加到任何东西,它只需要存在即可。
然后像这样订阅 MPVolumeViewWirelessRouteActiveDidChangeNotification
:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleWirelessRouteActiveDidChangeNotification:)
name:MPVolumeViewWirelessRouteActiveDidChangeNotification
object:nil];
添加这些方法来了解外部显示器的状态:
- (BOOL)isAirPlayConnected
{
return _volumeView.isWirelessRouteActive;
}
- (BOOL)isAirPlayMirroringActive
{
if ([self isAirPlayConnected]) {
NSArray *screens = [UIScreen screens];
if ([screens count] > 1) {
return [screens[1] mirroredScreen] == [UIScreen mainScreen];
}
}
return NO;
}
- (BOOL)isAirPlayPlaybackActive
{
return [self isAirPlayConnected] && ![self isAirPlayMirroringActive];
}
- (BOOL)isExternalPlaybackActive
{
if ([self isAirPlayPlaybackActive]) {
return YES;
} else {
NSArray *screens = [UIScreen screens];
if ([screens count] > 1) {
return [screens[1] mirroredScreen] != [UIScreen mainScreen];
}
}
return NO;
}
此外,您还可以检查 UIScreenDidConnectNotification
和 UIScreenDidDisconnectNotification
通知。有了所有这些,您就可以判断自己是否已连接到 AirPlay、AirPlay 镜像是否处于事件状态、AirPlay 播放(而非镜像)是否处于事件状态,或者您是否正在使用任何没有镜像的外部屏幕。
关于ios - iOS 是否提供任何功能来检测外部屏幕是 'hardwired' TV Out/HDMI 还是 'network' Airplay 显示器/设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20986176/
我已经搜索了一段时间,想找到一种方法来确定 iOS 外部屏幕是通过电缆连接还是无线连接,但找不到任何明显的方法。 我看过非官方的 AirPlay 规范 HERE ,但看不到任何明显的检测方法。有谁知道
我是一名优秀的程序员,十分优秀!