san*_*iva 21 iphone objective-c ios
我使用MPVolumeView显示Airplay图标,它工作正常.
但是我需要在Airplay网络出现时显示动画,并在播放网络时隐藏该动画.
Airplay开始和结束时是否有通知让我知道?
Ste*_*ter 18
这正是你要找的 - https://github.com/StevePotter/AirPlayDetector
它是一个单独的类,提供一个属性来确定airplay设备是否处于活动状态.并在可用性发生变化时发出通知
使用它很简单.比如,为了确定你写的可用性:
[AirPlayDetector defaultDetector].isAirPlayAvailable
Run Code Online (Sandbox Code Playgroud)
请享用!
确切地说: 使用公共API 准确检查airplay:NO
所有你可以用公共API做的是检查是否有可用的无线路由,它里面包含了单曲:(在当你有一个简单的例子MPVolumeView
比如迷上了某处你的观点,你可以调用volumeView.areWirelessRoutesAvailable;
)
如果您很好奇如何检查私有API是否可以使用airplay :
- (BOOL)isAirplayAvailable
{
Class MPAVRoutingController = NSClassFromString(@"MPAVRoutingController");
id routingController = [[MPAVRoutingController alloc] init];
NSArray* availableRoutes = [routingController performSelector:@selector(availableRoutes)];
for (id route in availableRoutes) {
NSDictionary* routeDescription = [route performSelector:@selector(avRouteDescription)];
if ([routeDescription[@"AVAudioRouteName"] isEqualToString:@"AirTunes"])
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
(实际上MPVolumeView
有一个MPAVRoutingController
实例作为它的ivar,所以-areWirelessRoutesAvailable
它只是一个完全适合的访问者[volumeView->_routingController wirelessDisplayRoutesAvailable]
)
同样AVAudioSession
暴露currentRoute
给你,所以你可以通过以下方式轻松检查airplay是否活跃:
- (BOOL)isAudioSessionUsingAirplayOutputRoute
{
AVAudioSession* audioSession = [AVAudioSession sharedInstance];
AVAudioSessionRouteDescription* currentRoute = audioSession.currentRoute;
for (AVAudioSessionPortDescription* outputPort in currentRoute.outputs){
if ([outputPort.portType isEqualToString:AVAudioSessionPortAirPlay])
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
(答案AirPlayDetector
不能保证Airplay可用 - 所有这一切都会检查MPVolumeView的routeSelection按钮的alpha值,无论如何在无线路由可用时都会显示,例如蓝牙.它将完全相同volumeView.areWirelessRoutesAvailable;
)
归档时间: |
|
查看次数: |
9796 次 |
最近记录: |