realidad pesa novedades descargar cuanto aumentada apps iphone cocoa-touch audio volume

iphone - pesa - novedades ios 11



¿Cómo configura el volumen de hardware en una aplicación de iPhone? (2)

Usan el MPVolumeView, simplemente agrégalo y hará el resto cuando el usuario lo toque. Nota: no funciona en iPhone Simulator. Creo que la nota de lanzamiento también mencionada no la usa directamente en Interface Builder.

MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(25, 378, 270, 30)]; [self.view addSubview:volumeView]; [volumeView release];

Algunas aplicaciones de iPhone, como Pandora, parecen manipular directamente el volumen de hardware y responder al botón de volumen físico. ¿Cómo se hace esto?

AudioSessionServices le permite obtener el volumen de salida de hardware actual con la propiedad kAudioSessionProperty_CurrentHardwareOutputVolume , pero es (supuestamente) de solo lectura.


Aquí hay otro ejemplo (completo) de configurar el volumen de hardware Y recuperar el volumen después de presionar las teclas de hardware:

// 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) > 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); }