[转]android 获取手机GSM/CDMA信号信息

本文转自:http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/

 

在Android中我们常用的轻松获取WIFI信号列表,那如何获取CDMA或者GSM的手机信号呢?
系统提供了TelephonyManager类,此类非常丰富,基本你所需要的手机信息都能获取到,那下面就来看看我们所需要的CDMA与GSM信号是如何获取的吧。

 

  1 private TelephonyManager telephonyManager;
  2 private PhoneStateListener phoneStateListener;
  3 首先声明两个变量
  4 
  5 
  6 
  7 
  8 在onCreate()方法中初始化变量
  9 InitPhoneStateListener();
 10 telephonyManager = (TelephonyManager) this.ctx.getSystemService(Context.TELEPHONY_SERVICE);
 11 telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
 12 telephonyManager.listen(phoneStateListener,PhoneStateListener.LISTEN_CELL_LOCATION);
 13 if(telephonyManager.getCellLocation()!=null){
 14 //获取当前基站信息
 15 phoneStateListener.onCellLocationChanged(telephonyManager.getCellLocation());
 16 }
 17 
 18 
 19 
 20 
 21 /** 初始化PhoneStateListener */
 22 private void InitPhoneStateListener() {
 23 phoneStateListener = new PhoneStateListener() {
 24 @Override
 25 public void onCellLocationChanged(CellLocation location) {
 26 // TODO Auto-generated method stub
 27 if (location instanceof GsmCellLocation) {// gsm网络
 28 phoneType = 1;
 29 GsmCell gsmCell = new GsmCell();
 30 gsmCell.lac = ((GsmCellLocation) location).getLac();
 31 gsmCell.cid = ((GsmCellLocation) location).getCid();
 32 /** 获取mcc,mnc */
 33 String mccMnc=telephonyManager.getNetworkOperator();
 34 if(mccMnc!=null&&mccMnc.length()>=5){
 35 gsmCell.mcc = mccMnc.substring(0, 3);
 36 gsmCell.mnc = mccMnc.substring(3, 5);
 37 }
 38 gsmCell.signal=lastSignal;
 39 gsmCell.time = System.currentTimeMillis();
 40 if (gsmCell.lac != -1 && gsmCell.cid != -1) {
 41 gsmCells.add(0, gsmCell);
 42 // Collections.sort(gsmCells);
 43 // /**最多保存近3个基站信息*/
 44 // if (gsmCells.size() >3)
 45 // gsmCells.remove(3);
 46 }
 47 //获取相邻基站信息
 48 List neighboringList=telephonyManager.getNeighboringCellInfo();
 49 for(NeighboringCellInfo ni:neighboringList){
 50 GsmCell gb = new GsmCell();
 51 gb.mnc=mccMnc.substring(3, 5);
 52 gb.lac=ni.getLac();
 53 gb.cid=ni.getCid();
 54 gb.signal=-133+2*ni.getRssi();
 55 gb.time=System.currentTimeMillis();
 56 gsmCells.add(gb);
 57 }
 58 } else {// 其他CDMA等网络
 59 try {
 60 Class cdmaClass = Class.forName("android.telephony.cdma.CdmaCellLocation");
 61 phoneType = 2;
 62 CdmaCellLocation cdma = (CdmaCellLocation) location;
 63 CdmaCell cdmaCell = new CdmaCell();
 64 cdmaCell.stationId = cdma.getBaseStationId() >= 0 ?
 65 cdma.getBaseStationId(): cdmaCell.stationId;
 66 cdmaCell.networkId = cdma.getNetworkId() >= 0 ? cdma
 67 .getNetworkId() : cdmaCell.networkId;
 68 cdmaCell.systemId = cdma.getSystemId() >= 0 ? cdma
 69 .getSystemId() : cdmaCell.systemId;
 70 /** 获取mcc,mnc */
 71 String mccMnc=telephonyManager.getNetworkOperator();
 72 if(mccMnc!=null&&mccMnc.length()>=5){
 73 cdmaCell.mcc = mccMnc.substring(0, 3);
 74 cdmaCell.mnc = mccMnc.substring(3, 5);
 75 }
 76 cdmaCell.signal=lastSignal;
 77 cdmaCell.time = System.currentTimeMillis();
 78 int lat = cdma.getBaseStationLatitude();
 79 int lon = cdma.getBaseStationLongitude();
 80 if (lat <Integer.MAX_VALUE&& lon <Integer.MAX_VALUE) {
 81 cdmaCell.lat = lat;
 82 cdmaCell.lon = lon;
 83 }
 84 if (cdmaCell.stationId != -1&& cdmaCell.networkId != -1&& cdmaCell.systemId != -1) {
 85 cdmaCells.add(0, cdmaCell);
 86 }
 87 List neighboringList=telephonyManager.getNeighboringCellInfo();
 88 for(NeighboringCellInfo ni:neighboringList){
 89 CdmaCell cdmaBean = new CdmaCell();
 90 cdmaBean.systemId=cdmaCell.systemId;
 91 cdmaBean.lac=ni.getLac();
 92 cdmaBean.cellid=ni.getCid();
 93 cdmaBean.signal=-113+2*ni.getRssi();
 94 cdmaCells.add(cdmaBean);
 95 }
 96 } catch (ClassNotFoundException classnotfoundexception) {
 97 }
 98 }// end CDMA网络
 99 super.onCellLocationChanged(location);
100 }// end onCellLocationChanged
101 
102 
103 
104 
105 @Override
106 public void onServiceStateChanged(ServiceState serviceState) {
107 // TODO Auto-generated method stub
108 super.onServiceStateChanged(serviceState);
109 }
110 @Override
111 public void onSignalStrengthsChanged(SignalStrength signalStrength) {
112 // TODO Auto-generated method stub
113 int asu=signalStrength.getGsmSignalStrength();
114 lastSignal=-113+2*asu; //信号强度
115 super.onSignalStrengthsChanged(signalStrength);
116 }
117 };
118 }// end InitPhoneStateListener

 

其实很简单,只要写好了监听类,一切信号都可以获取得到。
这样,我们很轻松的就获取到了手机信号及周围基站的信号强度了,当然,需要的读取手机状态等的权限就在这里不说了。

 

作者:sojex
Email:w.sojex@gmail.com

 

转载于:https://www.cnblogs.com/qingblog/archive/2012/07/19/2598871.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数码管流动显示(自己的单片机)

/********************************************************************************** * 标题: 试验数码管上显示数字( 单片机直接实现位选 共阴极) * * * * …

Hibernate懒加载

在Hibernate框架中&#xff0c;当我们要访问的数据量过大时&#xff0c;明显用缓存不太合适&#xff0c; 因为内存容量有限 &#xff0c;为了减少并发量&#xff0c;减少系统资源的消耗&#xff0c;这时Hibernate用懒加载机制来弥补这种缺陷&#xff0c;但是这只是弥补而不是用…

迪拜“烧掉800亿”造了座烂尾岛,奇葩建筑惊呆网友:有钱人的世界,我不懂!

全世界只有3.14 % 的人关注了爆炸吧知识来源&#xff1a;普象工业设计小站天呐&#xff01;最新消息阿布扎比酋长国又发现220亿桶非常规可采石油让原本富有的国家更加钱上有钱尤其是它的兄弟国——迪拜简直“豪”无人性耗资800亿美元的“世界岛”惨成全球最大烂尾项目竟没有表示…

英特尔收购威盛X86业务 兆芯何去何从

日前&#xff0c;英特尔公司以1.25亿美元收购威盛麾下Centaur 公司的x86业务。Centaur 是威盛的一家子公司&#xff0c;20多年前&#xff0c;威盛依靠数笔收购获得了x86授权&#xff0c;开发了数款X86芯片&#xff0c;由于性能与英特尔和AMD差距太大&#xff0c;威盛的X86 CPU在…

.net中的mapinfo开发:准备(一)

最近开发一个项目&#xff0c;用到了mapinfo的开发&#xff0c;所以想把自己研究的一些东西记录下来&#xff0c;一则供自己使用&#xff0c;二则供一些同道中的朋友参考&#xff0c;有什么不当之处&#xff0c;请提示&#xff0c;再做修改。 首先要了解一下mapinfo的基本概念&…

研究生计划-心得征程

以前定过一个计划&#xff0c;现在觉得有必要在重新规划一次&#xff0c;毕竟见识和认识有深了 1、编译原理&#xff0c;前些天是把数据结构写完了&#xff0c;编译原理也一直没看&#xff0c;所以下一步深入学习编译原理 2、学习PHP框架&#xff0c;像wordpress和yii,PHP也算入…

java launcher 下载_Java Launcher下载并安装

通过双击资源管理器中的类文件来运行Java程序&#xff0c;并创建一个EXE和可执行的JAR文件Java启动器通过双击类文件来运行Java应用程序和小程序. 通过右键单击以图形格式查看类源代码和类层次结构&#xff1b;显示jar和zip文件的内容java下载安装&#xff0c;而不是通过右键单…

自带数据线的迷你数显充电宝,好用到哭

▲ 点击查看无论是付钱办事坐车&#xff0c;还是游戏追剧闲聊&#xff0c;有个手机就够了啊~这也就导致了&#xff0c;出门最怕的不是没带钱&#xff0c;而是带了手机却没电了。手机没电&#xff01;这简直能要了老命啊&#xff01;幸好有充电宝“续命”&#xff01;但每回在打…

值得永久收藏的 C# 设计模式套路(二)

设计模式套路&#xff0c;第二弹。在第一篇中&#xff0c;主要写了创造模式相关的几种套路。如果你是刚看到这个文章&#xff0c;建议你先去看看第一篇 传送门。这一篇&#xff0c;我们说说结构模式相关的套路。结构模式&#xff0c;主要作用是将类型、对象和其它内容放在一起&…

VmWare5.5主机Citrix桌面实施方案(二)

三、配置数据库服务器安装数据库服务器分别在三台机器上安装SQL2008运行安装程序图示3.1点击确定继续图示3.2使用全新安装图示3.3图示3.4输入密钥继续图示3.5接受条款图示3.6进行安装图示3.7图示3.8图示3.9图示3.10图示3.11图示3.12图示3.13指定启动SQL账户图示3.14指定管理员图…

sql查询从m到n的这几条记录

查询从m到n的这几条记录 m-ngoselect top (n-m1) * from stu where id not in (select top (m-1) ID from stu ) --51-100select top 50 * from stu where id not in (select top 50 ID from stu )转载于:https://www.cnblogs.com/kuang/archive/2012/07/19/2599344.html

enmu枚举类型

在实际问题中&#xff0c;有些变量的取值被限定在一个有限的范围内。例如&#xff0c;一个星期内只有七天&#xff0c;一年只有十二个月&#xff0c;一个班每周有六门课程等等。如果把这些量说明为整型&#xff0c;字符型或其它类型显然是不妥当的。为此&#xff0c;C语言提供了…

java定义接口_一文知道Java中接口的定义

使用interface来定义一个接口。接口定义同类的定义类似&#xff0c;也是分为接口的声明和接口体&#xff0c;其中接口体由常量定义和方法定义两部分组成。定义接口的基本格式如下&#xff1a;方法&#xff1a;接口中的方法只有定义而没有被实现。1.接口是一组行为的规范、定义&…

告诉你一个可怕的数学事实:公路越多,城市越堵!

全世界只有3.14 % 的人关注了爆炸吧知识生活依旧美好上周&#xff0c;刘强西带着小天到附近的清扬山放松一下。然而&#xff0c;从京西大旅馆有两条路可以到清扬山。一条是金龙大道&#xff0c;前半程走完需要20分钟&#xff0c;但可怕的是路窄&#xff0c;车辆一多就慢&#x…

官方精简版!Windows 10 LTSC 2021 正式发布

微软现已正式发布 Windows 10 企业版 LTSC 2021。LTSC 全称为 the Long-Term Servicing Channel&#xff0c;即长期服务频道。使用 LTSC 服务模型&#xff0c;Windows 10 电脑可以延迟接收功能更新&#xff0c;功能更新每 2-3 年&#xff08;Windows 10 家庭版和专业版等此前为…

完全卸载mysql数据库图文教程

见&#xff1a;http://jingyan.baidu.com/article/f96699bbaa8fc1894f3c1b5a.html

不喜欢写测试的朋友看过来,与你分享写测试的经验 做一个爱写测试的程序员...

自从掌握了单元测试的要领之后&#xff0c;经常写测试&#xff0c;做测试&#xff0c;也非常喜欢做单元测试。我的文章《数据采集&#xff1a;完美下载淘宝Ip数据库 简单的程序节省60元人民币而不必购买数据库》中的代码&#xff0c;也是个测试方法&#xff0c;源代码在QQ群中公…

Struts2内置拦截器和自定义拦截器

内置拦截器 Struts2中内置类许多的拦截器&#xff0c;它们提供了许多Struts2的核心功能和可选的高级特性。这些内置的拦截器在struts-default.xml中配置。只有配置了拦截器&#xff0c;拦截器才可以正常的工作和运行。Struts 2已经为您提供丰富多样的&#xff0c;功能齐全的拦截…

基于eclipse RCP的文件夹管理工具

总的来说, Windows7的文件夹浏览器已经提供了很好的功能, 但是也有一些鞭长莫及的地方,比如: 无法搜索指定文件夹里面某些文件夹的文件我将经常使用的图标资源分成几个目录存放于一个文件夹中, 这些资源风格不同,来源也不同. 有些是来自开源项目的, 有些是来自iconfinder, 还有…

.NET 6新特性试用 | 异步流

前言IAsyncEnumerable<T>支持返回异步迭代的枚举器&#xff0c;但在.NET 6之前&#xff0c;即使在API中使用了IAsyncEnumerable<T>&#xff0c;它还是使用同步方式输出&#xff0c;首先将结果缓冲到内存中&#xff0c;然后再写入响应中&#xff1a;[HttpGet] publi…