在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){
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、Wifi信号强度。 Android中获取GSM、CDMA、Wifi信号强度
基于GSM/CDMA数据通信能力实现语音网关远程管理pdf,基于GSM/CDMA数据通信能力实现语音网关远程管理
GSM/CDMA室内信号分布试验系统与实践教学设计pdf,GSM/CDMA室内信号分布试验系统与实践教学设计
DCS/PHS/GSM/CDMA手机信号网络阻断扩展系统,刘保垣,王志军,在电子对抗中手机信号的阻断目前都是采用单机小功率或大功扫频阻断器。在需要多点密集的阻断场合多采用多台单机小功率阻断器,但
中兴4G块规格书,最新版,包含了各种不同规格的说明,选型必备
基于GSM/CDMA的短信平台 设计与实现
桑荣GSM/GPRS/CDMA串口调试工具rar,桑荣GSM/GPRS/CDMA串口调试工具
基于相位信息的DSSS/CDMA信号用户PN序列快速分离算法pdf,基于相位信息的DSSS/CDMA信号用户PN序列快速分离算法
基于GSM/CDMA网络的洪水预警系统在防洪减灾中的应用pdf,基于GSM/CDMA网络的洪水预警系统在防洪减灾中的应用
可配置用于W-CDMA、HSPA、cdma2000、1xEV-DO、IS-95、GSM、GPRS、EGPRS、TIA/EIA-136和AMPS手机测试。 多制式能力 易于编程 制式灵活的架构 E5515CU 硬件升级:8960是一台灵活的测试仪,可以通过升级满足您不断...
本文的主要工作是在先验知识未知的情况下,先对DS及DS/CDMA信号的参数进行估计,并在已获知信号参数的情况下,再对信号的PN码序列进行估计。
权威的中国联通GSM WCDMA数字蜂窝移动通信网技术体制
简单的实现Andoird下,根据gsm和cdma信号的基站定位功能。
CDMA写卡软件,可写NID和SID和IMSI五码和PRL频点序列
适合初学者,网络、通信、终端遇到的基本词汇
简要介绍 GSM频段 GSM900与GSM1800的比较 手机制式 GSM数字机和模拟手机话音相比 CDMA以GSM手机相比的五大优点
短信服务中间件采用数据库接口表方式,可适用于办公系统的短信功能集成和二次开发.
括GSM、CDMA、3G三种,手机自问世至今,经历了第一代模拟制式手机(1G)、第二代GSM、TDMA等数字手机(2G)、第2.5代移动通信技术CDMA和第三代移动通信技术3G。
基于短信和GPRS/CDMA-1X的基站动力环境远程监控系统pdf,基于短信和GPRS/CDMA-1X的基站动力环境远程监控系统