java 接受gsm信息_android 获取手机GSM/CDMA信号信息,并获得基站信息的方法

本文介绍了在Android中如何使用TelephonyManager类获取GSM和CDMA的信号强度以及基站信息。通过监听PhoneStateListener,可以获取到信号强度变化、细胞位置变化,并详细解释了如何处理这些信息。
摘要由CSDN通过智能技术生成

在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

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信号信息,并获得基站信息的方法全部内容了,希望大家多多支持脚本之家~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值