如何在iOS7中切换网络(2G/3G/4G)而不越狱?

如何在iOS7中切换网络(2G/3G/4G)而不越狱?,ios,ios7,iphone-privateapi,Ios,Ios7,Iphone Privateapi,我已经找到了,但是如果没有根访问权限,我只能“读”,不能“写”,这意味着它不能与函数一起工作 setAirplaneMode:YES 有没有办法做到这一点而不越狱,如果有,如何做到 更新 我发现了一个未记录的API,它可以在iOS7和iOS8中切换网络类型2G/3G/4G,而无需越狱,即使存在一些小问题。这是: char* sdk_path = "/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony"; //path

我已经找到了,但是如果没有根访问权限,我只能“读”,不能“写”,这意味着它不能与函数一起工作

setAirplaneMode:YES
有没有办法做到这一点而不越狱,如果有,如何做到

更新

我发现了一个未记录的API,它可以在iOS7和iOS8中切换网络类型2G/3G/4G,而无需越狱,即使存在一些小问题。这是:

char* sdk_path = "/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony"; //path of this Undocumented API
int* handle = dlopen(sdk_path,RTLD_LAZY);
if(handle == NULL){
    return;
}
struct CTServerConnection * (*CTServerConnectionCreate)() = dlsym(handle,"_CTServerConnectionCreate");
sc=CTServerConnectionCreate(kCFAllocatorDefault, callback, &t1);
void (*CTServerConnectionSetRATSelection)() = dlsym(handle, "_CTServerConnectionSetRATSelection");
然后,如果您只想使用2G,您可以使用以下功能:

CTServerConnectionSetRATSelection(&t1, sc, kCTRegistrationRATSelection0);
仅适用于3G:

CTServerConnectionSetRATSelection(&t1, sc, kCTRegistrationRATSelection1);
但是如果你想使用4G,你可能需要四个参数

CTServerConnectionSetRATSelection(&t1, sc, kCTRegistrationRATSelection6,kCTRegistrationRATSelection6);
哦,顺便说一句,你应该在课堂上添加以下内容:

extern CFStringRef kCTRegistrationRATSelection0;
extern CFStringRef kCTRegistrationRATSelection1;
extern CFStringRef kCTRegistrationRATSelection2;
extern CFStringRef kCTRegistrationRATSelection3;
extern CFStringRef kCTRegistrationRATSelection4;
extern CFStringRef kCTRegistrationRATSelection5;
extern CFStringRef kCTRegistrationRATSelection6;
extern CFStringRef kCTRegistrationRATSelection7;
extern CFStringRef kCTRegistrationRATSelectionUnknown;
我不知道它是如何工作的,但它确实工作了,在iOS7和iOS8中,没有越狱。但问题是:

如果您使用此API切换到2G,则无法在iPhone->设置中启用3G/4G。看起来您强制系统使用已更改的网络。另一个问题,我们都知道在4G中,语音呼叫使用的是CSFB,但如果使用此API切换到4G,则无法拨打任何号码或接收任何来电,因为2G和3G无法使用

有人知道这个函数吗

_CTServerConnectionSetRATSelection ?
这是什么意思

CFStringRef kCTRegistrationRATSelectionX 
意味着什么?如何解决我的问题以启用4G呼叫?非常感谢

它没有公共api。你真倒霉
我喜欢丹丹78的评论:我总是问这样一个问题:如果一个应用程序能够在没有我允许的情况下执行X,我会生气吗?如果答案是肯定的,那么苹果设计该系统很有可能防止这种情况发生。如果应用程序会干扰我的连接,这肯定会让我恼火。

不,没有办法改变它。我总是问这样一个问题:如果一个应用程序能够在未经我允许的情况下执行X,会不会让我生气?如果答案是肯定的,那么苹果设计该系统很有可能防止这种情况发生。如果应用程序会干扰我的连接,这肯定会让我很恼火。@dandan78,这是一个好问题,但对于苹果来说,对于几乎任何安全关键的事情,答案都是否定的。在iOS 6-7之前,即使通过AppStore应用程序,您也可以接听/取消电话、发送短信、访问私人信息、录制音频/视频等。即使现在,您也可以免费访问一些私人信息。所以,最后,这个问题不起作用,你很有可能在没有越狱和用户许可的情况下做很多事情。以上答案的更新只是我观点的另一个证明。