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 : 关闭动态链接库句柄

 

posted @ 2016-05-24 09:55  zbblogs  阅读(2780)  评论(1编辑  收藏  举报