iOS - 检测耳机孔是否存在耳机:
2014-03-13 17:29
447 查看
- (id)init
{
self = [super init];
if (self)
{
/*
OSStatus AudioSessionInitialize (
CFRunLoopRef inRunLoop, //运行循环的中断监听器回调应该被运行。传递NULL,使用主运行循环。
CFStringRef inRunLoopMode, //该模式的运行循环的中断监听功能将运行在。传递NULL,就相当于通过kCFRunLoopDefaultMode
AudioSessionInterruptionListener inInterruptionListener, //中断监听器回调函数。应用程序的音频会话对象调用回调时,会话被中断及(如应用程序仍在运行)中断结束时。可以为NULL。见AudioSessionInterruptionListener
void *inClientData //想传递给你的中断监听器回调。
);
*/
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, audioRouteChangeCallback, (__bridge void *)(self));
}
return self;
}
- (BOOL)isHeadphone
{
UInt32 propertySize = sizeof(CFStringRef);
CFStringRef state = nil;
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute ,&propertySize,&state);
//根据状态判断是否为耳机状态
if ([(__bridge NSString *)state isEqualToString:@"Headphone"] ||[(__bridge NSString *)state isEqualToString:@"HeadsetInOut"])
return YES;
else
return NO;
}
void audioRouteChangeCallback(void *inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData)
{
SInt32 routeChangeReason;
CFDictionaryRef routeChangeDictionary = inData;
CFNumberRef routeChangeReasonRef = CFDictionaryGetValue(routeChangeDictionary, CFSTR(kAudioSession_AudioRouteChangeKey_Reason));
CFNumberGetValue(routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason);
if (routeChangeReason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) { //拔掉
}
else if (routeChangeReason == kAudioSessionRouteChangeReason_NewDeviceAvailable) { //插入
[[MPMusicPlayerController applicationMusicPlayer] setVolume:1.0];
}
else if (routeChangeReason == kAudioSessionRouteChangeReason_NoSuitableRouteForCategory) {
}
}
{
self = [super init];
if (self)
{
/*
OSStatus AudioSessionInitialize (
CFRunLoopRef inRunLoop, //运行循环的中断监听器回调应该被运行。传递NULL,使用主运行循环。
CFStringRef inRunLoopMode, //该模式的运行循环的中断监听功能将运行在。传递NULL,就相当于通过kCFRunLoopDefaultMode
AudioSessionInterruptionListener inInterruptionListener, //中断监听器回调函数。应用程序的音频会话对象调用回调时,会话被中断及(如应用程序仍在运行)中断结束时。可以为NULL。见AudioSessionInterruptionListener
void *inClientData //想传递给你的中断监听器回调。
);
*/
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, audioRouteChangeCallback, (__bridge void *)(self));
}
return self;
}
- (BOOL)isHeadphone
{
UInt32 propertySize = sizeof(CFStringRef);
CFStringRef state = nil;
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute ,&propertySize,&state);
//根据状态判断是否为耳机状态
if ([(__bridge NSString *)state isEqualToString:@"Headphone"] ||[(__bridge NSString *)state isEqualToString:@"HeadsetInOut"])
return YES;
else
return NO;
}
void audioRouteChangeCallback(void *inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData)
{
SInt32 routeChangeReason;
CFDictionaryRef routeChangeDictionary = inData;
CFNumberRef routeChangeReasonRef = CFDictionaryGetValue(routeChangeDictionary, CFSTR(kAudioSession_AudioRouteChangeKey_Reason));
CFNumberGetValue(routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason);
if (routeChangeReason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) { //拔掉
}
else if (routeChangeReason == kAudioSessionRouteChangeReason_NewDeviceAvailable) { //插入
[[MPMusicPlayerController applicationMusicPlayer] setVolume:1.0];
}
else if (routeChangeReason == kAudioSessionRouteChangeReason_NoSuitableRouteForCategory) {
}
}
相关文章推荐
- iOS检测耳机是否插入
- ios检测网络是否存在
- ios检测应用程序是否存在并启动
- iOS 应用中检测网络是否存在的方法
- ios检测应用程序是否存在并启动
- IOS检测指定路径的文件是否存在
- ios检测应用程序是否存在并启动
- iOS 应用中检测网络是否存在的方法
- ios检测网络是否存在
- IOS检测指定路径的文件是否存在
- iOS开发>学无止境 - 检测路径下文件夹是否存在
- 检测远程URL是否存在的三种方法
- 检测URL是否存在
- 算法练习:检测一个int(整型)数组中是否存在相同的数(只用基本数据结构)
- android 检测sqlite数据表中字段(列)是否存在
- SQL Server 2000/2005检测存储过程名是否存在,存在删除
- 检测该进程是否存在?
- 跨浏览器检测flash是否存在
- ASP检测远程文件是否存在
- Adnroid 检测手机网络 和 wifi 是否存在