Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here is another (complete) example of setting the hardware volume AND retrieving the volume after pressing the hardware keys:</p> <pre><code>// AVAudiosession Delegate Method - (void)endInterruptionWithFlags:(NSUInteger)flags { // When interruption ends - set the apps audio session active again [[AVAudioSession sharedInstance] setActive:YES error:nil]; if( flags == AVAudioSessionInterruptionFlags_ShouldResume ) { // Resume playback of song here!!! } } // Hardware Button Volume Callback void audioVolumeChangeListenerCallback ( void *inUserData, AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData) { UISlider * volumeSlider = (__bridge UISlider *) inUserData; Float32 newGain = *(Float32 *)inData; [volumeSlider setValue:newGain animated:YES]; } // My UISlider Did Change Callback - (IBAction)volChanged:(id)sender { CGFloat oldVolume = [[MPMusicPlayerController applicationMusicPlayer] volume]; CGFloat newVolume = ((UISlider*)sender).value; // Don't change the volume EVERYTIME but in discrete steps. // Performance will say "THANK YOU" if( fabsf(newVolume - oldVolume) &gt; 0.05 || newVolume == 0 || newVolume == 1 ) [[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // Set the volume slider to the correct value on appearance of the view volSlider.value = [[MPMusicPlayerController applicationMusicPlayer] volume]; } - (void)viewDidLoad { [super viewDidLoad]; self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; // Activate the session and set teh delegate [[AVAudioSession sharedInstance] setActive:YES error:nil]; [[AVAudioSession sharedInstance] setDelegate:self]; // Create a customizable slider and add it to the view volSlider = [[UISlider alloc] init]; CGRect sliderRect = volSlider.frame; sliderRect.origin.y = 50; sliderRect.size.width = self.view.bounds.size.width; volSlider.frame = sliderRect; [volSlider addTarget:self action:@selector(volChanged:) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:volSlider]; // Regoister the callback to receive notifications from the hardware buttons AudioSessionAddPropertyListener ( kAudioSessionProperty_CurrentHardwareOutputVolume , audioVolumeChangeListenerCallback, (__bridge void*)volSlider ); [...] } - (void)viewDidUnload { [super viewDidUnload]; // Remove the Hardware-Button-Listener AudioSessionRemovePropertyListenerWithUserData( kAudioSessionProperty_CurrentHardwareOutputVolume, audioVolumeChangeListenerCallback, (__bridge void*)volSlider); } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload