android 獲取手機(jī)GSM/CDMA信號信息,并獲得基站信息的方法
在Android中我們常用的輕松獲取WIFI信號列表,那如何獲取CDMA或者GSM的手機(jī)信號呢?
系統(tǒng)提供了TelephonyManager類,此類非常豐富,基本你所需要的手機(jī)信息都能獲取到,那下面就來看看我們所需要的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){ //獲取當(dāng)前基站信息 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網(wǎng)絡(luò) 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等網(wǎng)絡(luò) 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網(wǎng)絡(luò) 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; //信號強(qiáng)度 super.onSignalStrengthsChanged(signalStrength); } }; }// end InitPhoneStateListener
以上就是小編為大家?guī)淼腶ndroid 獲取手機(jī)GSM/CDMA信號信息,并獲得基站信息的方法全部內(nèi)容了,希望大家多多支持腳本之家~
- Android9.0 SystemUI 網(wǎng)絡(luò)信號欄定制修改的流程解析
- Android自定義View展示W(wǎng)ifi信號強(qiáng)弱指示方法示例
- Android Init進(jìn)程對信號的處理流程詳細(xì)介紹
- Android手機(jī)信號強(qiáng)度檢測詳細(xì)介紹
- Android 模擬信號示波器示例代碼
- Android獲取當(dāng)前已連接的wifi信號強(qiáng)度的方法
- Android實現(xiàn)信號強(qiáng)度監(jiān)聽的方法
- Android提高之模擬信號示波器的實現(xiàn)
- android wifi信號強(qiáng)度等級區(qū)分的修改介紹
- Android獲取移動網(wǎng)絡(luò)信號強(qiáng)度的方法
相關(guān)文章
Android view自定義實現(xiàn)動態(tài)進(jìn)度條
這篇文章主要介紹了Android view自定義實現(xiàn)動態(tài)進(jìn)度條的相關(guān)資料,這里提供實例代碼及實現(xiàn)效果圖,需要的朋友可以參考下2016-12-12Android使用Item Swipemenulistview實現(xiàn)仿QQ側(cè)滑刪除功能
大家都用過QQ,肯定有人好奇QQ滑動刪除Item的效果是怎樣實現(xiàn)的,其實我們使用Swipemenulistview就可以簡單的實現(xiàn)。這篇文章主要介紹了Android使用ItemSwipemenulistview實現(xiàn)仿QQ側(cè)滑刪除功能,需要的朋友可以參考下2017-02-02更新至Android Studio4.1后發(fā)現(xiàn)as打不開的解決方法(原因分析)
這篇文章主要介紹了更新至Android Studio4.1后發(fā)現(xiàn)as打不開的解決方案,本文給大家分享問題所在原因給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10Android :okhttp+Springmvc文件解析器實現(xiàn)android向服務(wù)器上傳照片
這篇文章主要介紹了Android :okhttp+Springmvc文件解析器實現(xiàn)android向服務(wù)器上傳照片,需要的朋友可以參考下2020-05-05Android之聯(lián)系人PinnedHeaderListView使用介紹
Android聯(lián)系人中的ListView是做得比較獨特的,這幾天,我把他提取出來了,寫成一個簡單的例子,留著備用,感興趣的朋友可以參考下哈2013-06-06