SORU
6 EYLÜL 2010, PAZARTESİ


Ses düzeyi nasıl, ve iOS bildirimleri değişti ses?

Bir düğmeye basıldığında bir ses geliyor bu çok basit bir uygulama yazıyorum. Bu düğme cihazın sesini ayarlandığında çok mantıklı olmadığından cihazın ses hacmi sıfır olduğunda bunu devre dışı bırakmak istiyorum. (Ve sesi tekrar artırıyor olduğunda daha sonra yeniden.)

(Ve Yakışıklı bir kasa) için çalışan bir yolunu arıyorumgeçerli ses ayarını algılarve ses seviyesi değiştiğinde bir bildirim/Geri Al. Benses seviyesini değiştirmek istemiyorumayar.

Tüm bu düğme kullanılır söyledi ** 3 benim uygulanır. İPhone 4 çalışan bir iOS 4.0.1 ve 4.0.2 olarak çalışan bir iPhone 3G 4.0.1 ile bu test ettik. İOS SDK ile inşa llvm 1.5 ile 4.0.2. (Gcc veya llvm-gcc kullanarak hiçbir şeyi düzeltmez.) Yapı her iki şekilde de uygulama sırasında sorunlar, ne hata, ne de uyarıları var. Statik çözümleyici mutlu olur.

Şimdiye kadar, herhangi bir başarı olmadan denedim.

Apple'ın ses hizmetleri aşağıdaki belgeleri bu gibi çalışmalıdır kAudioSessionProperty_CurrentHardwareOutputVolume AudioSessionAddPropertyListener: Bir üye olmam gerekiyor

// Registering for Volume Change notifications
AudioSessionInitialize(NULL, NULL, NULL, NULL);
returnvalue = AudioSessionAddPropertyListener (

kAudioSessionProperty_CurrentHardwareOutputVolume ,
      audioVolumeChangeListenerCallback,
      self
);

returnvalue geri arama kayıt çalışmış demektir 0,.

Ne yazık ki, ben hiç bir zaman benim cihaz, kulaklık kumanda üzerindeki ses düğmeleri tuşuna basın veya zil sesi sessiz düğmeyi zaman benim fonksiyonu audioVolumeChangeListenerCallback için geri almak.

kAudioSessionProperty_AudioRouteChange WWDC videoları benzer örnek bir proje ve terimini birçok sitelerde Geliştirici belgeleri olarak kullanılan) için kayıt yaptırarak aslında . aynı kodu kullanırken ^em>yapınses yolu (ın/out kulaklık takmadan ya da cihaz yerleştirme ile) değiştirirken geri almak.

Bir kullanıcı Doug adlı başarıyla bu şekilde ses aslında zaten en üst düzeyde, çünkü değişmeyecek sürece) kullandığını iddia etmişti bir konu iPhone volume changed event for volume already max başlıklı açıldı. Hala, benim için çalışmıyor.

Denedim başka bir yolu bu gibi NSNotificationCenter kayıt olun.

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

Bu SystemVolume herhangi bir değişiklik yöntem volumeChanged bildirmelidir ama aslında öyle değil.

Yaygın inanışın ise çok zor Kakao ile bir şeyler başarmaya çalışan bir temelden yanlış bir şey yaptığını söyledi beri burada bir şey kaçırmak bekliyorum. Zor olduğuna inanıyorumbasit bir yoluiçinolsungeçerli ses düzeyini, Apple'ın belgeleri, örnek kod, Google, Apple Geliştirici Forumları veya 2010 videoları WWDC izleyerek kullanarak bulmak mümkün olmamıştır henüz.

CEVAP
24 HAZİRAN 2011, Cuma


İmzan yaptığını hiç şansımız volumeChanged yanlış: yöntem? Bu benim için, benim appdelegate atılmış çalıştı:

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(volumeChanged:)
     name:@"AVSystemController_SystemVolumeDidChangeNotification"
     object:nil];
}

- (void)volumeChanged:(NSNotification *)notification
{
    float volume =
    [[[notification userInfo]
      objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"]
     floatValue];

    // Do stuff with volume
}

Benim volumeChanged: yöntem düğmesi, birim bir sonucu olarak zaten max/min nedeniyle) değişiklik olmasa bile ütüledim, her zaman hit alır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Canal TekZoom

    Canal TekZoo

    1 NİSAN 2012
  • kimaliz

    kimaliz

    18 Temmuz 2006
  • martin shervington

    martin sherv

    7 EKİM 2011