转自:http://blog.sina.com.cn/s/blog_67b7cb7b0101kilj.html
ios监听静音键和音量键事件
(2013-05-02 11:41:43)判断是否静音:
- -
(BOOL)isMuted - {
-
CFStringRef route; -
UInt32 routeSize = sizeof(CFStringRef); -
-
OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &routeSize, &route); -
if (status == kAudioSessionNoError) -
{ -
if (route == NULL || !CFStringGetLength(route)) -
return TRUE; -
} -
-
return FALSE; - }
监听静音键:
- -
(BOOL)addMutedListener - {
-
OSStatus s = AudioSessionAddPropertyL istener(kAudioSessionProperty_AudioRouteChange, -
audioRouteChangeListener Callback, -
self); -
return s == kAudioSessionNoError; - }
回调函数:
- void
audioRouteChangeListener Callback (void *inUserData, -
AudioSessionPropertyID inPropertyID, -
UInt32 inPropertyValueSize, -
const void *inPropertyValue -
) - {
-
if (inPropertyID != kAudioSessionProperty_AudioRouteChange) return; -
BOOL muted = [mediaVolume isMuted]; -
// add code here - }
设置和获取音量:
- -
(float)volume - {
-
return [[MPMusicPlayerController applicationMusicPlayer] volume]; - }
-
- -
(void)setVolume:(float)newVolume - {
-
[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume]; - }
监听音量键:
- -
(BOOL)addHardKeyVolumeListener - {
-
OSStatus s = AudioSessionAddPropertyL istener(kAudioSessionProperty_CurrentHardwareOutputVol ume, -
audioVolumeChangeListene rCallback, -
self); -
return s == kAudioSessionNoError; - }
音量键回调函数:
- void
audioVolumeChangeListene rCallback (void *inUserData, -
AudioSessionPropertyID inPropertyID, -
UInt32 inPropertyValueSize, -
const void *inPropertyValue) - {
-
if (inPropertyID != kAudioSessionProperty_CurrentHardwareOutputVol ume) return; -
Float32 value = *(Float32 *)inPropertyValue; -
MediaVolume *mediaVolume = (MediaVolume *)inUserData; -
// add code here - }
{
}
2. 对 AudioSession 添加volume变化的 listener, 可以放在startAudioSession函数里
void volumeListenerCallback (
}
3. 获取当前的volume