android 获取手机GSM/CDMA信号信息,并获得基站信息的方法

 更新时间:2016年11月02日 10:12:53   投稿:jingxian  
下面小编就为大家带来一篇android 获取手机GSM/CDMA信号信息,并获得基站信息的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

在Android中我们常用的轻松获取WIFI信号列表,那如何获取CDMA或者GSM的手机信号呢?

系统提供了TelephonyManager类,此类非常丰富,基本你所需要的手机信息都能获取到,那下面就来看看我们所需要的CDMA与GSM信号是如何获取的吧。

private TelephonyManager telephonyManager;
private PhoneStateListener phoneStateListener;

首先声明两个变量

在onCreate()方法中初始化变量

InitPhoneStateListener();
telephonyManager = (TelephonyManager) this.ctx.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
telephonyManager.listen(phoneStateListener,PhoneStateListener.LISTEN_CELL_LOCATION);
if(telephonyManager.getCellLocation()!=null){
//获取当前基站信息
phoneStateListener.onCellLocationChanged(telephonyManager.getCellLocation());
}

/** 初始化PhoneStateListener */
private void InitPhoneStateListener() {
phoneStateListener = new PhoneStateListener() {
@Override
public void onCellLocationChanged(CellLocation location) {
// TODO Auto-generated method stub
if (location instanceof GsmCellLocation) {// gsm网络
phoneType = 1;
GsmCell gsmCell = new GsmCell();
gsmCell.lac = ((GsmCellLocation) location).getLac();
gsmCell.cid = ((GsmCellLocation) location).getCid();
/** 获取mcc,mnc */
String mccMnc=telephonyManager.getNetworkOperator();
if(mccMnc!=null&&mccMnc.length()>=5){
gsmCell.mcc = mccMnc.substring(0, 3);
gsmCell.mnc = mccMnc.substring(3, 5);
}
gsmCell.signal=lastSignal;
gsmCell.time = System.currentTimeMillis();
if (gsmCell.lac != -1 && gsmCell.cid != -1) {
gsmCells.add(0, gsmCell);
// Collections.sort(gsmCells);
// /**最多保存近3个基站信息*/
// if (gsmCells.size() >3)
// gsmCells.remove(3);
}
//获取相邻基站信息
List neighboringList=telephonyManager.getNeighboringCellInfo();
for(NeighboringCellInfo ni:neighboringList){
GsmCell gb = new GsmCell();
gb.mnc=mccMnc.substring(3, 5);
gb.lac=ni.getLac();
gb.cid=ni.getCid();
gb.signal=-133+2*ni.getRssi();
gb.time=System.currentTimeMillis();
gsmCells.add(gb);
}
} else {// 其他CDMA等网络
try {
Class cdmaClass = Class.forName("android.telephony.cdma.CdmaCellLocation");
phoneType = 2;
CdmaCellLocation cdma = (CdmaCellLocation) location;
CdmaCell cdmaCell = new CdmaCell();
cdmaCell.stationId = cdma.getBaseStationId() >= 0 ?
cdma.getBaseStationId(): cdmaCell.stationId;
cdmaCell.networkId = cdma.getNetworkId() >= 0 ? cdma
.getNetworkId() : cdmaCell.networkId;
cdmaCell.systemId = cdma.getSystemId() >= 0 ? cdma
.getSystemId() : cdmaCell.systemId;
/** 获取mcc,mnc */
String mccMnc=telephonyManager.getNetworkOperator();
if(mccMnc!=null&&mccMnc.length()>=5){
cdmaCell.mcc = mccMnc.substring(0, 3);
cdmaCell.mnc = mccMnc.substring(3, 5);
}
cdmaCell.signal=lastSignal;
cdmaCell.time = System.currentTimeMillis();
int lat = cdma.getBaseStationLatitude();
int lon = cdma.getBaseStationLongitude();
if (lat <Integer.MAX_VALUE&& lon <Integer.MAX_VALUE) {
cdmaCell.lat = lat;
cdmaCell.lon = lon;
}
if (cdmaCell.stationId != -1&& cdmaCell.networkId != -1&& cdmaCell.systemId != -1) {
cdmaCells.add(0, cdmaCell);
}
List neighboringList=telephonyManager.getNeighboringCellInfo();
for(NeighboringCellInfo ni:neighboringList){
CdmaCell cdmaBean = new CdmaCell();
cdmaBean.systemId=cdmaCell.systemId;
cdmaBean.lac=ni.getLac();
cdmaBean.cellid=ni.getCid();
cdmaBean.signal=-113+2*ni.getRssi();
cdmaCells.add(cdmaBean);
}
} catch (ClassNotFoundException classnotfoundexception) {
}
}// end CDMA网络
super.onCellLocationChanged(location);
}// end onCellLocationChanged

@Override
public void onServiceStateChanged(ServiceState serviceState) {
// TODO Auto-generated method stub
super.onServiceStateChanged(serviceState);
}
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
// TODO Auto-generated method stub
int asu=signalStrength.getGsmSignalStrength();
lastSignal=-113+2*asu; //信号强度
super.onSignalStrengthsChanged(signalStrength);
}
};
}// end InitPhoneStateListener

以上就是小编为大家带来的android 获取手机GSM/CDMA信号信息,并获得基站信息的方法全部内容了,希望大家多多支持脚本之家~

相关文章

  • Android开发仿映客送礼物效果

    Android开发仿映客送礼物效果

    这篇文章主要介绍了Android开发仿映客送礼物效果的实现代码,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-09-09
  • android AsynTask处理返回数据和AsynTask使用get,post请求

    android AsynTask处理返回数据和AsynTask使用get,post请求

    本文主要介绍了android AsynTask处理返回数据和AsynTask使用get,post请求方法。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Android利用Sensor(传感器)实现指南针小功能

    Android利用Sensor(传感器)实现指南针小功能

    这篇文章主要为大家详细介绍了Android利用Sensor(传感器)实现指南针小功能的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Andriod 获取电池的信息实例代码

    Andriod 获取电池的信息实例代码

    通过本段实例代码给大家介绍Andriod 获取电池的信息的相关知识,对android获取电池信息相关知识感兴趣的朋友一起学习吧
    2016-03-03
  • Android自定义布局实现仿qq侧滑部分代码

    Android自定义布局实现仿qq侧滑部分代码

    这篇文章主要为大家详细介绍了自定义布局实现仿qq侧滑Android部分代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Android实现万能自定义阴影控件实例代码

    Android实现万能自定义阴影控件实例代码

    这篇文章主要给大家介绍了关于Android实现万能自定义阴影控件的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • 深入理解Android热修复技术原理之代码热修复技术

    深入理解Android热修复技术原理之代码热修复技术

    在各种 Android 热修复方案中,Andfix的即时生效令人印象深刻,它稍显另类, 并不需要重新启动,而是在加载补丁后直接对方法进行替换就可以完成修复,然而它的使用限制也遭遇到更多的质疑
    2021-06-06
  • Android实现登录注册功能封装

    Android实现登录注册功能封装

    Android应用软件基本上都会用到登录注册功能,本篇文章主要介绍了Android登录注册功能封装功能实现,具有一定的参考价值,有兴趣的可以了解一下。
    2017-01-01
  • Android中SharedPreference使用实例讲解

    Android中SharedPreference使用实例讲解

    这篇文章主要介绍了Android中SharedPreference使用方法,实现登陆界面记住密码功能,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • Android绘制平移动画的示例代码

    Android绘制平移动画的示例代码

    这篇文章主要展示的是利用Android绘制平移动画的示例代码,文中的实现步骤讲解详细,对我们学习Android有一定的帮助,感兴趣的可以试一试
    2022-01-01

最新评论