iOS如何以编程方式关闭静音模式下的震动[私有API]

7
我希望能够在我的iPhone进入静音模式时,即使在设置中已经打开震动,也能保持不震动。我想要通过程序来控制这个功能。由于只是为了我自己使用,因此可以使用私有API。是否有API可以管理设置中的声音?你知道任何解决方案吗?
谢谢, Flo
3个回答

1
我认为以下代码可以解决问题。不过你需要从某个地方触发它(我还不清楚你是想通过按按钮来触发还是在应用程序内部触发)。
NSString *sbPath = @"/var/mobile/Library/Preferences/com.apple.springboard.plist";
NSMutableDictionary *sbDict = [[NSMutableDictionary alloc] initWithContentsOfFile:sbPath];
[sbDict setValue:[NSNumber numberWithBool:NO] forKey:@"silent-vibrate"];
[sbDict writeToFile:filePath atomically: YES];
notify_post("com.apple.SpringBoard/Prefs");

我自己没有尝试过,但在Smartvibrate调整中找到了与您寻找的类似的内容。这将更改设置参数,因此当您的应用程序完成时,应将其改回打开状态。
希望能有所帮助!

0

iOS 8 更新:

NSMutableDictionary *dict; BOOL newState = NO;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
dict = [[defaults persistentDomainForName:@"com.apple.springboard"] mutableCopy] ?:           [[NSMutableDictionary alloc] init];
NSNumber *value = [NSNumber numberWithBool:newState];
[dict setValue:value forKey:@"ring-vibrate"];
[dict setValue:value forKey:@"silent-vibrate"];
[defaults setPersistentDomain:dict forName:@"com.apple.springboard"];
notify_post("com.apple.springboard.ring-vibrate.changed");
notify_post("com.apple.springboard.silent-vibrate.changed");

1
当我在Xcode 6.2中尝试这个(使用Bridging Header连接到Objective-C的Swift项目)时,我会收到一个“在C99中,函数'notify_post'的隐式声明无效”的错误提示。编辑:在Obj-C项目中也是如此。 - vrwim
这对你还有效吗?我似乎无法使其工作。 - Jan

0
更新@baptiste-truchot的答案(以及@vrwim的关注):
这需要
#include <notify.h>

在相关的.h文件顶部。

关于notify.h的苹果文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接