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.
To restart your iPhone, press and hold down the Power and Volume buttons until a slider appears on-screen. If restarting doesn't work, you can trigger a "force restart" by pressing Volume Up, Volume Down, and then Power.
If you recently updated your iPhone and the volume buttons stopped working, try restarting your device by turning it off and on again. If this doesn't work and you did recently update your phone, you might need to reset your device. This means backing up your iPhone and erasing all the content settings.
But for a workaround, we do have volume_watcher: ^2.0. 1, which gives a callback when the volume is changed. Note: Volume carries from 0 to 1, where 0 means no volume and 1 means max volume. Show activity on this post.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With