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

时间:2014-10-16 07:10:03

标签: ios ios7 iphone-privateapi

我找到some private APIs,但看起来没有root访问权限,我只能'读',而不是'写',这意味着它不能用于函数

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呼叫?非常感谢!

1 个答案:

答案 0 :(得分:0)

没有公开的api。你运气不好

我喜欢dandan78的评论:我总是问这样一个问题:它会不会让我感到厌烦,一个应用程序可以在未经我许可的情况下做X?如果答案是肯定的,那么Apple很有可能设计系统来防止这种情况发生。如果应用程序可能会破坏我的连接,它肯定会让我烦恼。"