当前位置: 移动技术网 > 移动技术>移动开发>Android > android 获取手机GSM/CDMA信号信息,并获得基站信息的方法

android 获取手机GSM/CDMA信号信息,并获得基站信息的方法

2019年07月24日  | 移动技术网移动技术  | 我要评论

在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 <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

@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信号信息,并获得基站信息的方法全部内容了,希望大家多多支持移动技术网~

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网