在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() {@Overridepublic void onCellLocationChanged(CellLocation location) {// TODO Auto-generated method stubif (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@Overridepublic void onServiceStateChanged(ServiceState serviceState) {// TODO Auto-generated method stubsuper.onServiceStateChanged(serviceState);}@Overridepublic void onSignalStrengthsChanged(SignalStrength signalStrength) {// TODO Auto-generated method stubint asu=signalStrength.getGsmSignalStrength();lastSignal=-113+2*asu; //信号强度super.onSignalStrengthsChanged(signalStrength);}};}// end InitPhoneStateListener
以上就是小编为大家带来的android 获取手机GSM/CDMA信号信息,并获得基站信息的方法全部内容了,希望大家多多支持武林网~
新闻热点
疑难解答