2013-10-13 28 views
7

To pytanie pojawia się często i nie odpowiada, ale bez konkretnej lub dokładnej odpowiedzi. Dlatego zmienię pytanie na iOS7 i mam nadzieję na jakąś pomoc.Sterowanie głośnością systemu iPhone iOS7 (dzwonkiem i sygnałem ostrzegawczym)

Muszę użyć AudioServicesPlaySystemSound, aby odtwarzać dźwięki, ponieważ synchronizacja jest krytyczna i jest to tylko sposób na jednoczesny efekt dźwiękowy z dokładnym timingiem (wypróbuj każdą inną opcję).

To działa dobrze, ale chciałbym dostosować głośność. Wydaje się, że jedynym sposobem, aby to zrobić, jest użycie przycisków, chociaż niektórzy twierdzą, że używają MPVolumeView (działa tylko dla muzyki), niektórzy twierdzą, że używają MPMusicPlayerController (ale to działa tylko dla muzyki i jest teraz amortyzowany), a inni po prostu mówią to nie można zrobić - co wygląda na bardziej prawdopodobne.

Jednak w przypadku iOS7 dostępna jest funkcja sterowania suwakiem w ustawieniach> dźwięków dla głośności alarmu dzwonka. Czy istnieje sposób, w jaki mogę podklasować, zreplikować lub uzyskać dostęp do tej kontroli slajdu, aby zmienić ten wolumin z poziomu aplikacji?

+0

Myślę, że widziałem to w aplikacji Waze. Przejrzę. –

+0

Spójrz na to - http://stackoverflow.com/questions/10286744/how-to-change-device-volume-on-ios-not-music-volume –

+0

@Paul Pivec Jeśli znajdziesz odpowiedź, proszę udostępnij tak jak ja również tego szukam. Nie mogę uwierzyć, że Apple ma takie głupie ograniczenia ... – user959631

Odpowiedz

0

myślę chcesz kontrolować głośność poprzez program

- (void)setVolume:(float)Level 
    { 

     OSStatus errorMsg = AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, Level); 

    if (errorMsg) { 
     NSLog(@"AudioQueueSetParameter returned %d when setting the volume.", errorMsg); 
    } 

} 
  • użyć tego kodu, aby ustawić poziom głośności odejście z kodu przez który przycisk, którym chcemy sterować.
+0

jeśli to nie jest programowanie: zapoznaj się z tym linkiem http://stackoverflow.com/questions/10855874/audioservicesplaysystemsound-volume –

1

Apple zaleca korzystania MPVolumeView, więc wpadłem na to:

Dodaj volumeSlider właściwość:

@property (nonatomic, strong) UISlider *volumeSlider; 

Init MPVolumeView i dodać gdzieś na widoku (może być ukryte, bez ramki, lub puste z powodu showsRouteButton = NO i showsVolumeSlider = NO):

MPVolumeView *volumeView = [MPVolumeView new]; 
volumeView.showsRouteButton = NO; 
volumeView.showsVolumeSlider = NO; 
[self.view addSubview:volumeView]; 

Znajdź i zapisz odniesienie do UISlider:

__weak __typeof(self)weakSelf = self; 
[[volumeView subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    if ([obj isKindOfClass:[UISlider class]]) { 
     __strong __typeof(weakSelf)strongSelf = weakSelf; 
     strongSelf.volumeSlider = obj; 
     *stop = YES; 
    } 
}]; 

dodawania działania celem dla UIControlEventValueChanged:

[self.volumeSlider addTarget:self action:@selector(handleVolumeChanged:) forControlEvents:UIControlEventValueChanged]; 

a następnie zaktualizować swoją kontrolę niestandardową gdy objętość została zmieniona (tj przez regulację głośności sprzętu):

- (void)handleVolumeChanged:(id)sender 
{ 
    NSLog(@"%s - %f", __PRETTY_FUNCTION__, self.volumeSlider.value); 
    self.myCustomVolumeSliderView.value = self.volumeSlider.value; 
} 

a także odwrotnie:

- (IBAction)myCustomVolumeSliderViewValueChanged:(id)sender { 
    NSLog(@"set volume to: %f", self.myCustomVolumeSliderView.value); 
    self.volumeSlider.value = self.myCustomVolumeSliderView.value; 
} 

UWAGA: Upewnij się, że ustawienie self.volumeSlider.value nie robi pętlę z powrotem do ustawiania self.myCustomVolumeSliderView.value.

Mam nadzieję, że to pomoże komuś (i że Apple nie usuwa MPVolumeSlider z MPVolumeView).

+1

Wygląda na to, że zmienia się głośność systemu, a nie głośność dzwonka/alarmu, o co pytał OP. – levigroker