iPod touch 检测不到耳机
Posted
技术标签:
【中文标题】iPod touch 检测不到耳机【英文标题】:iPod touch not detecting the earphone 【发布时间】:2013-11-14 06:04:59 【问题描述】:我使用下面提到的代码来识别是否有任何“耳机”连接到 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”设备上的“耳机”?
【问题讨论】:
【参考方案1】:我可以使用下面提到的方法解决这个问题(从“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)
【讨论】:
以上是关于iPod touch 检测不到耳机的主要内容,如果未能解决你的问题,请参考以下文章
当我的应用程序处于后台模式时,检测从 iPhone 插入或拔出耳机插孔
windows11台式电脑type_c接口检测不到耳机设备?主板是华硕B450.求助大神!!!!