300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > [转]android 获取手机GSM/CDMA信号信息

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

时间:2022-06-06 00:00:12

相关推荐

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

本文转自:/zh-cn/blogs//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 workId = cdma.getNetworkId() >= 0 ? cdma 67 .getNetworkId() : workId; 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&& workId != -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 onCellLocationChanged101 102 103 104 105 @Override106 public void onServiceStateChanged(ServiceState serviceState) {107 // TODO Auto-generated method stub108 super.onServiceStateChanged(serviceState);109 }110 @Override111 public void onSignalStrengthsChanged(SignalStrength signalStrength) {112 // TODO Auto-generated method stub113 int asu=signalStrength.getGsmSignalStrength();114 lastSignal=-113+2*asu; //信号强度115 super.onSignalStrengthsChanged(signalStrength);116 }117 };118 }// end InitPhoneStateListener

其实很简单,只要写好了监听类,一切信号都可以获取得到。

这样,我们很轻松的就获取到了手机信号及周围基站的信号强度了,当然,需要的读取手机状态等的权限就在这里不说了。

作者:sojex

Email:w.sojex@

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。