iOS获取运营商信号强度
此API是apple私有API,所以只可运用在越狱设备中,如果提交appstore,会遭遇apple的拒绝上架反馈!
1 #import <dlfcn.h> 2 3 int getSignalLevel() 4 { 5 void *libHandle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony",RTLD_LAZY);//获取库句柄 6 int (*CTGetSignalStrength)(); //定义一个与将要获取的函数匹配的函数指针 7 CTGetSignalStrength = (int(*)())dlsym(libHandle,"CTGetSignalStrength"); //获取指定名称的函数 8 9 if(CTGetSignalStrength == NULL) 10 return -1; 11 else{ 12 int level = CTGetSignalStrength(); 13 dlclose(libHandle); //切记关闭库 14 return level; 15 } 16 }
关于dlfcn的介绍,它是用于加载动态库,包括如下函数:
void* dlopen(const char*, int flag); char* dlerror(); void* dlsym(void* handler, char* symbol); int dlclose(void* handler);
dlopen : 打开一个动态连接库,并返回一个类型为void*的handler,flag为打开模式,可选的模式有两种
- RTLD_LAZY 暂缓决定,等有需要时再解出符号
- RTLD_NOW 立即决定,返回前解除所有未决定的符号
dlerror : 返回dl操作的错误,若没有出现错误,则返回NUlL,否则打印错误信息
dlsym : 查找动态链接库中的符号symbol,并返回该符号所在的地址
dlclose : 关闭动态链接库句柄
要得到你必须要付出,要付出你还要学会坚持,如果你真的觉得很难,那你就放弃,但是你放弃了就不要抱怨,我觉得人生就是这样,世界真的是平等的,每个人都要通过自己的努力,去决定自己生活的样子。