ios获取CELLID,LAC等信息方法
搞了一个来月的这个东西了,还是没有完全解决问题,下面方法可以获取简单的Cell信息,
方法一:
//CoreTelephony.h
//主要就这两个结构体,其他需要的话,自己添加
struct CTServerConnection
{
int a;
int b;
CFMachPortRefmyport;
int c;
int d;
int e;
int f;
int g;
int h;
int i;
};
struct CellInfo
{
int servingmnc;
int network;
int location;
int cellid;
int station;
int freq;
int rxlevel;
// int freq;
int c1;
int c2;
};
//.m
#import "GetGsmInfo.h"
#import "CoreTelephony.h"
#include <dlfcn.h>
CFMachPortRef port;
struct CTServerConnection *sc=NULL;
struct CTServerConnection scc;
struct CellInfo cellinfo;
int b;
int t1;
@implementationGetGsmInfo
int callback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)
{
printf("Callback called\n");
return0;
}
- (void) getCellInfo
{
int cellcount;
char* sdk_path = "/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony";
int* handle =dlopen(sdk_path, RTLD_LAZY);
void (*CTServerConnectionCellMonitorGetCellInfo)() = dlsym(handle, "_CTServerConnectionCellMonitorGetCellInfo");
int* (*CTServerConnectionCellMonitorGetCellCount)() = dlsym(handle, "_CTServerConnectionCellMonitorGetCellCount");
void (*CTServerConnectionCellMonitorStart)() = dlsym(handle, "_CTServerConnectionCellMonitorStart");
struct CTServerConnection * (*CTServerConnectionCreate)() = dlsym(handle, "_CTServerConnectionCreate");
int (*CTServerConnectionGetPort)() = dlsym(handle, "_CTServerConnectionGetPort");
sc=CTServerConnectionCreate(kCFAllocatorDefault, callback, &t1);
for(b=0;b<cellcount;b++)
{
NSAutoreleasePool* pool = [[NSAutoreleasePoolalloc] init];
memset(&cellinfo, 0, sizeof(struct CellInfo));
int ts = 0;
/** 这个方法的问题出现在这里,3.0以前的版本是4个参数,运行后会崩溃,这个我花了很长时间发现是5个参数,不过获取的结果不理想,只获取了5个结果,其他4个是错误的,如果有人知道请,跟贴,或告诉我下,谢谢了*/
CTServerConnectionCellMonitorGetCellInfo(&t1, sc, b, &ts, &cellinfo);
printf("Cell Site: %d, MNC: %d, ",b,cellinfo.servingmnc);
printf("LAC: %d, Cell ID: %d, Station: %d, ",cellinfo.location, cellinfo.cellid, cellinfo.station);
printf("Freq: %d, RxLevel: %d, ", cellinfo.freq, cellinfo.rxlevel);
printf("C1: %d, C2: %d\n", cellinfo.c1, cellinfo.c2);
[pool release];
pool = nil;
}
dlclose(handle);
}
把上面的东西直接加,必须在真机上调试(要插上卡哦),才能看到结果哦,其中获取项有MNC,MCC,LAC,CELLID,PXLEVEL,其他四项返回-1,如果有人知道请告诉我下,谢谢了,
方法2:
串口通信,这个方法很实用,可以解决很多问题,这个我也是找网上的资料,只是拿来用罢了,
代码如下:
#include "at.h"
int fd= InitConn(115200);
AT(fd);
char buf[100] = "";
/** 这里是发送的AT命令,如下面的命令,可以获取CELL的一些信息, 还有其他的一些信息,网上找找就有了,不过不是所有的命令都可以用哦,有些iphone没有留接口,有就用到一个命令AT+CCED=0,1,这个可以获取CELL的较详细的信息,但是IPHONE就没有留接口,没法用,悲剧*/
//下面是一些我找到的,可以用的命令
//获取小区信息
//SendStrCmd(fd, "AT+CREG=2;+CREG?\r\n");
//获取当前小区的信号强度
//SendStrCmd(fd, "AT+CSQ\r\n");
//基带信息
//SendStrCmd(fd, "At+xgendata\r\n");
//获得IMSI。这命令用来读取或者识别SIM卡的IMSI(国际移动签署者标识)。在读取IMSI之前应该先输入PIN(如果需要PIN的话)。
//SendStrCmd(fd, "AT+CCID\r\n");
//获得SIM卡的标识。这个命令使模块读取SIM卡上的EF-CCID文件
//SendStrCmd(fd, "AT+CCID\r\n");
//读取信息中心号码
//SendStrCmd(fd, "AT+CSCA?\r\n");
//单元广播信息标识。
//SendStrCmd(fd, "AT+CSCB?\r\n");
SendStrCmd(fd, "AT+XCELLINFO=1\r\n");
while (1)
{
read(fd, buf, 100);
printf("%s", buf);
memset(buf, 0, 100);
};
使用前,下载我的附件,把它们加入工程,然后用上面的方法就可以获取信息,获取的信息为mcc,mnc,lac,cellid,rssi。还有前后两个整数,应该是标示当前CELL的,
我还想获取更详细的关于CELL的信息,如果有人知道请告诉我下,谢谢,
注意:
在使用上面的方法时,我奉劝使用第二个方法,虽然第一个简单,易操作,但是,有内存问题,程序容易崩溃,现在我也没有解决那个问题,所有用的第二个方法,自己解析AT获取的数据。
还有第二个方法,我是在iphone 3GS上试的,iphone4断口打开了,但是一直获取不到数据,运行不过去,如果有知道原因的,请告诉下,谢谢,
ios获取CELLID,LAC等信息方法的更多相关文章
- ios 获取设备相关的信息
.获取设备的信息 UIDevice *device = [[UIDevice alloc] int]; NSString *name = device.name; //获取设备所有者的名称 NSStr ...
- iOS获取通讯录所有联系人信息
以下是2种方式: 第一种方法: GetAddressBook.h #import <Foundation/Foundation.h> @interface GetAddressBook : ...
- IOS 获取更多的设备信息
● 如果想获得更多的设备信息,比如 ● 设备型号.CPU情况.内存使用情况.硬盘使用情况 ● 是否越狱.装了哪些传感器.当前运行的进程 ● ... ... ● 有2种方法获取更多的设备信息 ...
- iOS 获取设备的各种信息的方法
一.目录结构: 获取屏幕宽度与高度 获取设备版本号 获取iPhone名称 获取app版本号 获取电池电量 获取当前系统名称 获取当前系统版本号 获取通用的唯一识别码UUID 获取当前设备IP 获取总内 ...
- iOS获取iPhone系统等信息和服务器返回空的异常处理
前言: 在项目中经常会遇到需要获取系统的信息来处理一些特殊的需求和服务端返回为空的处理,写在这里只是笔记一下. 获取设备的信息 NSLog(@"globallyUniqueString=%@ ...
- iOS ---------- 获取设备的各种信息
一.目录结构: 获取屏幕宽度与高度 获取设备版本号 获取iPhone名称 获取app版本号 获取电池电量 获取当前系统名称 获取当前系统版本号 获取通用的唯一识别码UUID 获取当前设备IP 获取总内 ...
- ios 获取手机相关的信息
获取手机信息 应用程序的名称和版本号等信息都保存在mainBundle的一个字典中,用下面代码可以取出来 //获取版本号 NSDictionary *infoDict = [[NSBundl ...
- js获取当前页面的url信息方法
例如网址:http://localhost:12085/My/OrderM.aspx 设置或获取对象指定的文件名或路径. alert(window.location.pathname) 输出结果:/M ...
- js获取当前页面url信息方法(JS获取当前网址信息)
设置或获取对象指定的文件名或路径. alert(window.location.pathname) 设置或获取整个 URL 为字符串. alert(window.location.href); 设置或 ...
随机推荐
- MDK的一些设置(尤其是部分代码无法断点问题的解决)
转自http://www.cnblogs.com/worldsing/p/3412323.html
- Yii 检查输入的数据是否已经存在
只需要在对应的Model文件中的rules方法里面加入 array('username', 'unique', 'message'=>'{attribute}已存在'),//username是需 ...
- 关于在biweb 中安装完成后 首页上方报错问题的解决
在利用biweb进行网站开发的时候 首先得安装biweb 安装就是下一步,,,下一步....下一步 最后就成功了 .但是有种情况我总是竟让遇到,而已有的人安装会遇到 有的人安装就不会遇到,后 ...
- .NET WebForm 简介
WebForm是微软开发的一款产品,它将用户的请求和响应都封装为控件.让开发者认为自己是在操作一个windows界面.极大地提高了开发效率. 在学习WebForm时,其知识量比WinForm要多,在实 ...
- dpkg命令的用法
dpkg 是Debian package的简写,为”Debian“ 操作系统 专门开发的套件管理系统,用于软件的安装,更新和移除. 所有源自"Debian"的Linux的发行版都使 ...
- NET中的规范标准注释(一) -- XML注释标签讲解
一.摘要 .Net允许开发人员在源代码中插入XML注释,这在多人协作开发的时候显得特别有用. C#解析器可以把代码文件中的这些XML标记提取出来,并作进一步的处理为外部文档. 这篇文章将展示如何使用这 ...
- qml 封装技巧-利用数据来进行适配
Text属于用的频率比较高而且需要定义的地方又比较多的地方,看一下如下的把Text封装成Label进行使用. 使用的例子: Label { id: titleLabel anchors { left: ...
- Halcon 10.0 Sample:完整性检查(圆形)
* ball.hdev: Inspection of Ball Bonding * 球接合检查 Comment Time:// *核心思想:.白色区域用作自动ROI,黑色区域是目标 * .Openin ...
- POJ 2226 最小点覆盖(经典建图)
Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8881 Accepted: 3300 Desc ...
- 【59测试】【树】【dp】
第一题 A : 这棵树由n个节点以及n - 1条有向边构成,每条边都从父亲节点指向儿子节点,保证除了根节点以外的每个节点都有一个唯一的父亲.树上的节点从1到n标号.该树的一棵子树的定义为某个节点以及从 ...