2010-04-24 88 views

回答

4

,你應該添加下列LCODE到您的應用程序。 否則在第一次讀取之後,該設置被緩存,並且如果用戶切換到設置,進行更改並切換回來,我們應該重新讀取緩存的值。 :)

- (void)applicationWillEnterForeground:(UIApplication *)application { 
CFPreferencesAppSynchronize(CFSTR("/var/mobile/Library/Preferences/com.apple.preferences.sounds")); 

如果有人告訴我如何評論這個網站我真的會變得更有幫助。

+0

令人沮喪的是,這似乎不適用於iOS 6.0.1。我的應用似乎緩存了應用第一次加載時選擇的設置值。如果我改變設置並切換回我的應用程序,它不會調整。如果我強制退出我的應用程序並重新啓動,則會啓動更改。我現在有一個兩難:不要在我的自定義鍵盤中提供按鍵點擊,或者在應用程序暫停時設置發生變化的錯誤將被忽略。哪個更糟? – 2012-12-12 15:33:01

+0

我在6.1.4上檢查過,我的應用程序總是從'Boolean keyExistsAndHasValidFormat = false; 布爾值= CFPreferencesGetAppBooleanValue( CFSTR( 「鍵盤」), CFSTR( 「在/ var /移動/庫/首選項/ com.apple.preferences.sounds」), &keyExistsAndHasValidFormat);'所以我的代碼停止播放點擊不久前。所以,如果用戶抱怨,我會直接將他們引導到蘋果。我們失去了戰鬥。 – Hrissan 2013-05-12 09:17:24

17

沒有記錄的方式來檢查這一點,但它是可能的。我不知道這是否真的被視爲「私人API」,所以如果您使用這種方法,請準備好拒絕。

鍵盤單擊聲音設置存儲在共享的com.apple.preferences.sounds首選項中。所以,你可以嘗試

return CFPreferencesGetAppBooleanValue(
     CFSTR("keyboard"), 
     CFSTR("/var/mobile/Library/Preferences/com.apple.preferences.sounds"), 
     NULL); 

(BTW:實際調用打「咔嚓」聲UIKit中是[UIHardware _playSystemSound:1104];)如果你想完美的解決方案

+3

CFPreferencesGetAppBooleanValue調用完美,但UIHardware無法識別(或文檔中的任何位置)。相反,我添加了AudioToolkit框架並調用'AudioServicesPlaySystemSound(1104)'來獲得同樣的效果。 – 2010-04-24 10:50:13

+0

@Kris:這是因爲UIHardware是一個私人類。 – kennytm 2010-04-24 10:52:07