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); 设置或 ...
随机推荐
- List怎么遍历删除元素
public static void main(String[] args) { List<String> list = new ArrayList<String>(); ...
- iOS开发 沙盒路径和使用
1.模拟器沙盒目录文件都在个人用户名文件夹下的一个隐藏文件夹里,中文叫资源库,他的目录其实是Library.因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件: ...
- abstract class和interface有什么区别?
1. 接口 只可以定义static final成员变量. 即使不显性写出来 也还是会是static final 2. 接口的 方法不能有方法体,并且只能是public的. 1.抽象类:如果类中有一 ...
- 【转】Image Cyborg 一键下载存储网页所有图片
下午仿照网上例子写了个抓取网页中图片并保存到本地的Python的例子,好奇就google了下是否有类似的在线抓取图片的外挂工具. 接着就找到了Pseric写的这篇文章 - Image Cyborg 一 ...
- ASP.NET 程序中删除文件夹导致session失效解决问题
在Global中 Application_Start 添加 如: void Application_Start(object sender, EventArgs e) { //在 ...
- 与SQL注入第一次相遇
sql注入的含义sql注入是将代码插入(拼接)到应用(用户)的输入参数中, 之后再将这些参数传递给后台的SQL服务器加以解析并执行的攻击, 总结起来就是攻击者将恶意代码拼接到sql语句并加以执行从而得 ...
- OPENGL学习之路(0)--安装
此次实验目的: 安装并且配置环境. 1 下载 https://www.opengl.org/ https://www.opengl.org/wiki/Getting_Started#Downloadi ...
- 荣品RP4412开发板摄像头驱动调用及对焦控制
1.关于更换不同摄像头驱动调用问题. 问:RP4412开发板,我用的摄像头640*480图像预览时OK的,但是我调用1280*720的初始化预览,摄像头没有图像了,是不是camera程序也需要修改? ...
- android WebView总结
http://blog.csdn.net/chenshijun0101/article/details/7045394 http://blog.csdn.net/ethan_xue/article/d ...
- JavaScript 用法
JavaScript 用法 HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> 和 & ...