“如何改变”;呼叫等待”;在iOS(越狱设备)中编程?
我不想以编程方式打开/关闭iPhone的呼叫等待功能(可在“如何改变”;呼叫等待”;在iOS(越狱设备)中编程?,ios,iphone,jailbreak,cydia-substrate,Ios,Iphone,Jailbreak,Cydia Substrate,我不想以编程方式打开/关闭iPhone的呼叫等待功能(可在Settings>Phone>callwaiting中找到) 我发现电话设置调用-setCallWaitingEnabled:specifier:电话设置ScalWaitingController类中的方法。我在/System/Library/PreferenceBundles/MobilePhoneSettings.bundle/Call Waiting.plist中找到了它: <?xml version="1.0" encodi
Settings>Phone>callwaiting
中找到)
我发现电话设置调用-setCallWaitingEnabled:specifier:电话设置ScalWaitingController
类中的方法。我在/System/Library/PreferenceBundles/MobilePhoneSettings.bundle/Call Waiting.plist中找到了它:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>id</key>
<string>com.apple.preferences.phone.call-waiting</string>
<key>items</key>
<array>
<dict>
<key>cell</key>
<string>PSGroupCell</string>
</dict>
<dict>
<key>cell</key>
<string>PSSwitchCell</string>
<key>get</key>
<string>callWaitingEnabled:</string>
<key>label</key>
<string>Call Waiting</string>
<key>set</key>
<string>setCallWaitingEnabled:specifier:</string>
</dict>
</array>
<key>title</key>
<string>Call Waiting</string>
</dict>
</plist>
我不知道我走的路是否正确。是否有其他方法打开/关闭呼叫等待设置?corethony.framework
专用API的声明
CF_EXTERN_C_BEGIN
CF_EXPORT CFNotificationCenterRef CTTelephonyCenterGetDefault();
CF_EXPORT void CTTelephonyCenterAddObserver(CFNotificationCenterRef center, const void *observer, CFNotificationCallback callBack, CFStringRef name, const void *object, CFNotificationSuspensionBehavior suspensionBehavior);
CF_EXPORT void CTSettingRequest(NSDictionary* dict);
CF_EXPORT void CTSettingSave(NSDictionary* dict);
CF_EXPORT NSString* kCTSettingCallClassVoice;
CF_EXPORT NSString* kCTSettingTypeCallWaiting;
CF_EXPORT NSString* kCTSettingType;
CF_EXPORT NSString* kCTSettingCallClass;
CF_EXPORT NSString* kCTSettingEnabled;
CF_EXTERN_C_END
设置请求和保存是异步完成的。结果将发送到电话中心回调:
void SettingCallback(CFNotificationCallback center, void* observer, NSString* name, const void* objec, NSDictionary* userInfo)
{
if ([name isEqualToString:@"kCTSettingRequestSuccessNotification"])
{
//Setting request results are in 'userInfo' argument
}
else if ([name isEqualToString:@"kCTSettingRequestErrorNotification"])
{
//Setting request error
}
else if ([name isEqualToString:@"kCTSettingSaveSuccessNotification"])
{
//Setting saved
}
else if ([name isEqualToString:@"kCTSettingSaveErrorNotification"])
{
//Setting save error
}
}
...
CTTelephonyCenterAddObserver(CTTelephonyCenterGetDefault(), NULL, SettingCallback, NULL, NULL, CFNotificationSuspensionBehaviorHold);
请求呼叫等待设置:
CTSettingRequest(@{@"STSettingTypeUniqueIdentifier" : kCTSettingTypeCallWaiting,
kCTSettingCallClass : kCTSettingCallClassVoice,
kCTSettingType : kCTSettingTypeCallWaiting});
保存呼叫等待设置(在本例中,已启用):
这看起来像一个UI控制器,由从网络获取的数据驱动。要禁用呼叫等待,您需要使用SS代码。代码的完整列表位于:@Petesh谢谢你的回答。我找不到任何关于运行SS代码的信息。你知道怎么做吗?不知道,可能是通过调制解调器接口。@creker非常感谢。我觉得你的回答有点问题。我认为在您的答案中CoreTephony声明的前4行之前应该有extern“C”
。我还有一个问题:如何找到其他字符串来更改其他设置?您是如何找到这些函数的?只有在使用obj-C++代码中的声明时,才需要extern“C”
。否则就不需要了。我使用您在问题中提到的首选项包反汇编编写了该代码。@CrekerThank!我正在使用objc(我正在使用Xcode和ioopendev进行编译,所以我猜它是objc!),如果我没有将extern“C”
放进去,它会给我一个错误。你知道在iOS中启动反汇编的好参考资料吗?
CTSettingRequest(@{@"STSettingTypeUniqueIdentifier" : kCTSettingTypeCallWaiting,
kCTSettingCallClass : kCTSettingCallClassVoice,
kCTSettingType : kCTSettingTypeCallWaiting});
CTSettingSave(@{@"STSettingTypeUniqueIdentifier" : kCTSettingTypeCallWaiting,
kCTSettingCallClass : kCTSettingCallClassVoice,
kCTSettingType : kCTSettingTypeCallWaiting,
kCTSettingEnabled : @YES});