2010-04-24 87 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