有很多关于如何通过 AudioSessionGetProperty / kAudioSessionProperty_AudioInputAvailable 检测麦克风是否连接到iPod touch G2的文章,但我还没有看到任何与检测有关的文章连接到iPod touch G1的耳机。
要查看: iPod touch G2硬件与iPod touch G1硬件的区别在于以下几种方式:
我有一个应用程序,需要播放声音才有用,我希望自己很好,并且有一个探测器,显示应用程序在连接一些耳机后很有用。
我的初步测试显示,即使耳机未连接到iPod,AudioSession API(特别是 AudioSessionGetProperty 且 kAudioSessionProperty_AudioRoute 常量)也会始终报告“耳机”触摸G1。
我错过了什么吗?我的AudioSession呼叫是否有交叉连线?如果有人在iPod touch G1上试过这个并获得了不同的结果?是否有另一种方法可以编织AudioSession API并获得我想要的东西?
这完全针对iPhone OS 3.0以及真正的iPod touch G1硬件上的iPhone OS 3.0 SDK。
提前致谢, --Batgar
答案 0 :(得分:2)
您可以轻松使用此方法:
- (BOOL)isHeadsetPluggedIn {
UInt32 routeSize = sizeof (CFStringRef);
CFStringRef route;
OSStatus error = AudioSessionGetProperty (kAudioSessionProperty_AudioRoute,
&routeSize,
&route);
if (!error && (route != NULL) && ([route isEqual:@"HeadsetInOut"])) {
return YES;
}
return NO;
}
答案 1 :(得分:1)
检查一下。
以下是录音源代码,支持在移除耳机时暂停播放,这可能对您有帮助。
答案 2 :(得分:1)
由于没有其他路线,kAudioSessionProperty_AudioRoute
将始终返回第一代耳机。当耳机被拔出时,第二代和iphone以及其他所有将支持另一条路线(扬声器),但是第一代的另一条路线也是如此。
至少使用这个记录的API调用,你将无法检测到第一代ipod耳机状态。
答案 3 :(得分:0)
来自SpeakHere
error = AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable,& size,& inputAvailable); if(error)printf(“ERROR GETTING INPUT AVAILABILITY!%d \ n”,错误); btn_record.enabled =(inputAvailable)?是:否;
答案 4 :(得分:0)
上面的答案不起作用,因为它不编译,所以我发布这个,因为这可能会帮助一些人。您需要做的就是找到音频路线。以下是音频的可能路线
路线的已知值:
希望这有帮助
- (BOOL)isHeadsetPluggedIn {
UInt32 routeSize = sizeof (CFStringRef);
CFStringRef route;
OSStatus error = AudioSessionGetProperty (kAudioSessionProperty_AudioRoute,
&routeSize,
&route);
if (!error && (route != NULL)) {
NSString* routeStr = (__bridge NSString*)route; //Convert CFStringRef to NSString
NSRange routeRange = [routeStr rangeOfString:@"Head"];
if (routeRange.location != NSNotFound){
return YES;
}
}
return NO;
}