Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Retrieve cell towers information

Tags:

Does anybody know how to retrieve cell tower list on GSM and CDMA on Android.

I have been trying to use Google Maps Locations API: https://developers.google.com/maps/documentation/business/geolocation/

And I want to get cell towers information with these fields:

  • cellId: Unique identifier of the cell. On GSM, this is the Cell ID (CID); CDMA networks use the Base Station ID (BID).
  • locationAreaCode: The Location Area Code (LAC) for GSM networks; CDMA networks use Network ID (NID).
  • mobileCountryCode: The cell tower's Mobile Country Code (MCC).
  • mobileNetworkCode: The cell tower's Mobile Network Code. This is the MNC for GSM, or the System ID (SID) for CDMA.
  • age: The number of milliseconds since this cell was primary. If age is 0, the cellId represents a current measurement.
  • signalStrength: Radio signal strength measured in dBm.
  • timingAdvance: The timing advance value.

This code doesn't especially getting cell towers information.

TelephonyManager tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  // Type of the network int phoneTypeInt = tel.getPhoneType(); String phoneType = null; phoneType = phoneTypeInt == TelephonyManager.PHONE_TYPE_GSM ? "gsm" : phoneType; phoneType = phoneTypeInt == TelephonyManager.PHONE_TYPE_CDMA ? "cdma" : phoneType; try {   if (phoneType != null) {     params.put("radioType", phoneType);   } } catch (Exception e) {}  /*  * The below code doesn't work I think.  */ JSONArray cellList = new JSONArray(); List<NeighboringCellInfo> neighCells = tel.getNeighboringCellInfo(); for (int i = 0; i < neighCells.size(); i++) {   try {     JSONObject cellObj = new JSONObject();     NeighboringCellInfo thisCell = neighCells.get(i);     cellObj.put("cellId", thisCell.getCid());     cellList.put(cellObj);   } catch (Exception e) {} } if (cellList.length() > 0) {   try {     params.put("cellTowers", cellList);   } catch (JSONException e) {} } 

And I set permissions like this:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> 

Please help me, thank you.

like image 731
wf9a5m75 Avatar asked Nov 08 '12 17:11

wf9a5m75


People also ask

How do I find cell tower information?

Network Cell Info Lite (for Android) This highly-rated free Android app uses crowdsourced 4G and 5G tower location data from Mozilla Location Services. Once you open the app, go to the "map" tab. You'll see nearby towers, and the app will draw a blue line to the tower you're connected to.

Is there an app to find cell towers?

Network Cell Info Lite is exclusive to Android users but is one of the most highly-rated cell tower locator apps in Google Play. This app shows you cell tower locations based on their database so you can easily track signal strength in a specific area.

Does Google Maps show cell tower?

Cellular Tower Maps uses Google Maps to display the approximate location of cell phone towers and the coverage of each cell on that tower. The data for the maps is crowd-sourced and comes from users who have downloaded the apps, CellMapper for Windows Mobile, CellMapper for Android and CellMapper for BlackBerry.


1 Answers

I had this problem much more recently and it ended up being the fact that

getNeighboringCellInfo

is deprecated from API 23 up. To get around this use something like the following (it's quite annoying, really):

public static JSONArray getCellInfo(Context ctx){         TelephonyManager tel = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);          JSONArray cellList = new JSONArray();  // Type of the network         int phoneTypeInt = tel.getPhoneType();         String phoneType = null;         phoneType = phoneTypeInt == TelephonyManager.PHONE_TYPE_GSM ? "gsm" : phoneType;         phoneType = phoneTypeInt == TelephonyManager.PHONE_TYPE_CDMA ? "cdma" : phoneType;          //from Android M up must use getAllCellInfo         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {                List<NeighboringCellInfo> neighCells = tel.getNeighboringCellInfo();             for (int i = 0; i < neighCells.size(); i++) {                 try {                     JSONObject cellObj = new JSONObject();                     NeighboringCellInfo thisCell = neighCells.get(i);                     cellObj.put("cellId", thisCell.getCid());                     cellObj.put("lac", thisCell.getLac());                     cellObj.put("rssi", thisCell.getRssi());                     cellList.put(cellObj);                 } catch (Exception e) {                 }             }          } else {             List<CellInfo> infos = tel.getAllCellInfo();             for (int i = 0; i<infos.size(); ++i) {                 try {                     JSONObject cellObj = new JSONObject();                     CellInfo info = infos.get(i);                     if (info instanceof CellInfoGsm){                         CellSignalStrengthGsm gsm = ((CellInfoGsm) info).getCellSignalStrength();                         CellIdentityGsm identityGsm = ((CellInfoGsm) info).getCellIdentity();                         cellObj.put("cellId", identityGsm.getCid());                         cellObj.put("lac", identityGsm.getLac());                         cellObj.put("dbm", gsm.getDbm());                         cellList.put(cellObj);                     } else if (info instanceof CellInfoLte) {                         CellSignalStrengthLte lte = ((CellInfoLte) info).getCellSignalStrength();                         CellIdentityLte identityLte = ((CellInfoLte) info).getCellIdentity();                         cellObj.put("cellId", identityLte.getCi());                         cellObj.put("tac", identityLte.getTac());                         cellObj.put("dbm", lte.getDbm());                         cellList.put(cellObj);                     }                  } catch (Exception ex) {                  }             }         }          return cellList;     } 
like image 185
D2TheC Avatar answered Oct 17 '22 08:10

D2TheC