gpt4 book ai didi

audio - iPod touch无法检测到耳机

转载 作者:行者123 更新时间:2023-12-03 02:15:53 27 4
gpt4 key购买 nike

我使用下面提到的代码来确定是否有“耳机”连接到iOS设备。

//find out, if any earphones are connected to the device
- (BOOL)isHeadsetPluggedIn {
UInt32 routeSize = sizeof (CFStringRef);
CFStringRef route;
NSLog(@"Inside 'isHeadsetPluggedIn'");

// Registers the audio route change listener callback function
AudioSessionAddPropertyListener (kAudioSessionProperty_AudioRouteChange, audioRouteChangeListenerCallback, (__bridge void *)(self));

OSStatus error = AudioSessionGetProperty (kAudioSessionProperty_AudioRoute,
&routeSize,
&route);

/* Known values of route:
* "Headset"
* "Headphone"
* "Speaker"
* "SpeakerAndMicrophone"
* "HeadphonesAndMicrophone"
* "HeadsetInOut"
* "ReceiverAndMicrophone"
* "Lineout"
*/

if (!error && (route != NULL)) {
NSString* routeStr = (NSString*)CFBridgingRelease(route);
NSRange headphoneRange = [routeStr rangeOfString : @"Head"];
NSLog(@"route %@", routeStr);
if (headphoneRange.location != NSNotFound) {
return YES;
}
} else {
NSLog(@"Error %d while retrieving audio property", error);
}
return NO;
}

上面的代码适用于iPad mini,iPad和iPhone设备。
但是在“iPod touch”设备中,“AudioSessionGetProperty”函数在检索音频属性时返回错误“错误” 560557673”。
因此,它不会检测是否有任何“耳机”连接到“iPod touch”设备。

如何在“iPod touch”设备上找到“耳机”?

最佳答案

我可以使用下面提到的方法(从“SO”找到,但不记住地址)解决此问题。

BOOL isAudioRouteAvailable(CFStringRef routeType)
{
/*
As of iOS 5:
kAudioSessionOutputRoute_LineOut;
kAudioSessionOutputRoute_Headphones;
kAudioSessionOutputRoute_BluetoothHFP;
kAudioSessionOutputRoute_BluetoothA2DP;
kAudioSessionOutputRoute_BuiltInReceiver;
kAudioSessionOutputRoute_BuiltInSpeaker;
kAudioSessionOutputRoute_USBAudio;
kAudioSessionOutputRoute_HDMI;
kAudioSessionOutputRoute_AirPlay;
*/

//Prep
BOOL foundRoute = NO;
CFDictionaryRef description = NULL;

//Session
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
AudioSessionInitialize(NULL, NULL, NULL, NULL);
});

//Property
UInt32 propertySize;
AudioSessionGetPropertySize(kAudioSessionProperty_AudioRouteDescription, &propertySize);
OSStatus error = AudioSessionGetProperty(kAudioSessionProperty_AudioRouteDescription, &propertySize, &description);
if ( !error && description ) {
CFArrayRef outputs = CFDictionaryGetValue(description, kAudioSession_AudioRouteKey_Outputs);
CFIndex count = CFArrayGetCount(outputs);
if ( outputs && count ) {
for (CFIndex i = 0; i < count; i++) {
CFDictionaryRef route = CFArrayGetValueAtIndex(outputs, i);
CFStringRef type = CFDictionaryGetValue(route, kAudioSession_AudioRouteKey_Type);
NSLog(@"Got audio route %@", type);

//Audio route type
if ( CFStringCompare(type, routeType, 0) == kCFCompareEqualTo ) {
foundRoute = YES;
break;
}
}
}
} else if ( error ) {
NSLog(@"Audio route error %ld", error);
}

//Cleanup
if ( description ) {
CFRelease(description);
}

//Done
return foundRoute;
}

通过打电话,
isAudioRouteAvailable(kAudioSessionOutputRoute_Headphones)

关于audio - iPod touch无法检测到耳机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19970700/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com