即使在 iPhone 上的默认相机应用中,也不支持调高/调低音量。可能是它们在打开相机时阻止了这些按钮的输入。他们不阻止的是静音开关。我添加了这个通知,即使在相机打开的情况下也调用了我的回调:
AudioSessionInitialize(nil, nil, nil, nil);
AudioSessionSetActive(true);
AudioSessionAddPropertyListener(
kAudioSessionProperty_AudioRouteChange,
applicationAudioRouteDidChange,
self);
你需要解决的问题是,如果有人插入耳机,'applicationAudioRouteDidChange'方法也会被调用。您可以按照AudioSessionProgrammingGuide 中的说明进行检查:
当系统调用路由更改回调时,它提供
您需要确定要采取的行动的信息。根据你的
从音频回调 AudioSessionPropertyListener 原型
会话服务,如下所示:
void MyPropertyListener ( void *inClientData, AudioSessionPropertyID inID,UInt32 inDataSize, const void *inData );
对于路线更改事件,
系统在inID中发送kAudioSessionProperty_AudioRouteChange
参数。
发送到回调的 inData 参数包含一个 CFDictionaryRef
描述的对象:
为什么路线改变了以前的路线是什么
我这样做了,当静音开关被 mmmm 切换时它会拍照:
void applicationAudioRouteDidChange(void *inClientData,
AudioSessionPropertyID inID,
UInt32 inDataSize, const void *inData)
{
if ([[(NSDictionary*)inData objectForKey:@"OutputDeviceDidChange_Reason"] intValue] == 5) {
[((RootViewController*)inClientData).picker takePicture];
}
// Do something like reset the system
}
正如 Tom 所说,您尝试实现的功能将是 iOS 5 的一部分。