iPhone Detect Volume Keys press.
Asked Answered
B

1

10

I need to detect when the user presses the hardware volume keys, (App Store safe approach) I have tried a number of things with no luck. Do you know how to implement such functionality? At present I am registering for notifications, however they don't seem to get called. Here's my code:

  AudioSessionInitialize(NULL, NULL, NULL, NULL);
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self
                       selector:@selector(volumeChanged:) 
                           name:@"AVSystemController_SystemVolumeDidChangeNotification" 
                         object:nil];

And the receiver method is:

-(void)volumeChanged:(NSNotification *)notification{
         NSLog(@"YAY, VOLUME WAS CHANGED");}

Any tips would be greatly appreciated.

Barbarossa answered 23/9, 2011 at 11:45 Comment(1)
look here: #773332Attemper
C
4

You need to start an audio session before the notification will fire:

AudioSessionInitialize(NULL, NULL, NULL, NULL); 
AudioSessionSetActive(true); 

Now you can subscribe to the notification:

[[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(volumeChanged:) 
    name:@"AVSystemController_SystemVolumeDidChangeNotification" 
    object:nil];

To get the volume:

float volume = [[[notification userInfo] 
    objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] 
    floatValue];

You will need to store the volume and compare it to the previous value you got from a notification to know which button was pressed.

This solution will still adjust the system volume when the user presses the volume key, and show the volume overlay. If you want to avoid changing the system volume and showing the overlay (in essence completely repurpose the volume keys), see this answer

Chattanooga answered 10/4, 2013 at 1:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.