我一直在寻找一种方法来确定iOS外部屏幕是否有线连接或通过无线方式找不到任何明显的方法.
我在这里看过非官方的AirPlay规格,但看不到任何明显的检测方法.有没有人知道是否可以使用legal /'public'API完成此操作.
是的,确实有办法.
在您的应用中的某个位置,创建一个实例MPVolumeView.在某些实例中保持变量.您不必将其作为子视图添加到任何内容,它只需要存在.
然后订阅MPVolumeViewWirelessRouteActiveDidChangeNotification类似:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleWirelessRouteActiveDidChangeNotification:)
name:MPVolumeViewWirelessRouteActiveDidChangeNotification
object:nil];
Run Code Online (Sandbox Code Playgroud)
添加这些方法以了解外部显示的状态:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
此外,您可以检查UIScreenDidConnectNotification和UIScreenDidDisconnectNotification通知.有了这一切,您可以判断您是否连接到AirPlay,AirPlay Mirroring是否处于活动状态,AirPlay播放(非镜像)是否处于活动状态,或者您是否使用任何没有镜像的外部屏幕.
我不相信有任何公共 API 可以做到这一点。我猜想,在苹果看来,这不是你的应用程序关心的问题。这取决于用户如何处理应用程序的屏幕:他们可以截屏并通过电子邮件发送给每个人,或者只是将电线插入投影仪并将其显示在建筑物的一侧。试图在应用程序内阻止这些行为不太可能。
不过,您可以使用 Apple 的配置器工具来实现其中一些目的。例如,它允许您配置公司拥有的 iOS 设备,以仅允许对某些主机进行 AirPlay。它还可以阻止屏幕截图和其他可能有用的事情。我不知道您是否能准确获得您正在寻找的内容,但如果您对要安装此应用程序的设备有一定程度的控制,则可能需要考虑一下。
| 归档时间: |
|
| 查看次数: |
1707 次 |
| 最近记录: |