许多国产软件都会使用基站进行定位,android模拟器是没有流量卡的,所以没有基站位置,但是我们可以通过Xposed来让模拟器拥有指定的基站信息。拥有基站信息的模拟器就可以在地图app中定位了,这种方式比通过hook修改经纬度要更加好一点,可能大多数软件都是基站来判断,而不是经纬度。
基站定位使用到如下概念
MCC,Mobile Country Code,移动国家代码(中国的为460);
MNC,Mobile Network Code,移动网络号码(中国移动为00,中国联通为01,中国电信为02);
LAC,Location Area Code,位置区域码;
CID,Cell Identity,基站编号;
BSSS,Base station signal strength,基站信号强度。
通常基站信息由如下api 获取得到 :
telephonyManager # getAllCellInfo()
获取所有基站信息,返回的是一个List基站列表信息
telephonyManager # getCellLocation()
获取当前基站信息,移动联通返回的是GsmCellLocation,通过返回值再去调用gsmCellLocation.getLac()和gsmCellLocation.getCid()可以得到当前的LAC和CID(这两个是基站的重要信息);
电信返回的是CdmaCellLocation,获取到LAC和CID的方法是cdmaCellLocation.getNetworkId()和cdmaCellLocation.getBaseStationId()
telephonyManager # GetNeighboringCellInfo()
获取邻近的基站信息,返回的是List基站列表信息
顺便提一下MCC和MNC的获取方式
通过telephonyManager # getNetworkOperator()获取得到,它返回一个字符串长度为5的值,前3位就是MCC ,后两位为MNC
可能的结果: 46000 中国移动(GSM) 46001 中国联通(GSM) 46002 中国移动(TD-S) 46003 中国电信(CDMA) 46004 空(似乎是专门用来做测试的) 46005 中国电信(CDMA) 46006 中国联通(WCDMA) 46007 中国移动(TD-S)46008 46009 46010 46011 中国电信(FDD-LTE)
接下来就是我们Xposed出场的时