日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]android 获取手机GSM/CDMA信号信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文轉自:http://software.intel.com/zh-cn/blogs/2011/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 cdmaCell.networkId = cdma.getNetworkId() >= 0 ? cdma 67 .getNetworkId() : cdmaCell.networkId; 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&& cdmaCell.networkId != -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 onCellLocationChanged 101 102 103 104 105 @Override 106 public void onServiceStateChanged(ServiceState serviceState) { 107 // TODO Auto-generated method stub 108 super.onServiceStateChanged(serviceState); 109 } 110 @Override 111 public void onSignalStrengthsChanged(SignalStrength signalStrength) { 112 // TODO Auto-generated method stub 113 int asu=signalStrength.getGsmSignalStrength(); 114 lastSignal=-113+2*asu; //信號強度 115 super.onSignalStrengthsChanged(signalStrength); 116 } 117 }; 118 }// end InitPhoneStateListener

?

其實很簡單,只要寫好了監聽類,一切信號都可以獲取得到。
這樣,我們很輕松的就獲取到了手機信號及周圍基站的信號強度了,當然,需要的讀取手機狀態等的權限就在這里不說了。

?

作者:sojex
Email:w.sojex@gmail.com

?

轉載于:https://www.cnblogs.com/qingblog/archive/2012/07/19/2598871.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的[转]android 获取手机GSM/CDMA信号信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。