public static void loadCellInfo(TelephonyManager tm, Device pDevice) { int lCurrentApiVersion = android.os.Build.VERSION.SDK_INT; try { if (pDevice.mCell == null) { pDevice.mCell = new Cell(); } List<CellInfo> cellInfoList = tm.getAllCellInfo(); if (cellInfoList != null) { for (final CellInfo info : cellInfoList) { //Network Type pDevice.mCell.setNetType(tm.getNetworkType()); if (info instanceof CellInfoGsm) { final CellSignalStrengthGsm gsm = ((CellInfoGsm) info).getCellSignalStrength(); final CellIdentityGsm identityGsm = ((CellInfoGsm) info).getCellIdentity(); // Signal Strength pDevice.mCell.setDBM(gsm.getDbm()); // [dBm] // Cell Identity pDevice.mCell.setCID(identityGsm.getCid()); pDevice.mCell.setMCC(identityGsm.getMcc()); pDevice.mCell.setMNC(identityGsm.getMnc()); pDevice.mCell.setLAC(identityGsm.getLac()); } else if (info instanceof CellInfoCdma) { final CellSignalStrengthCdma cdma = ((CellInfoCdma) info).getCellSignalStrength(); final CellIdentityCdma identityCdma = ((CellInfoCdma) info).getCellIdentity(); // Signal Strength pDevice.mCell.setDBM(cdma.getDbm()); // Cell Identity pDevice.mCell.setCID(identityCdma.getBasestationId()); pDevice.mCell.setMNC(identityCdma.getSystemId()); pDevice.mCell.setLAC(identityCdma.getNetworkId()); pDevice.mCell.setSID(identityCdma.getSystemId()); } else if (info instanceof CellInfoLte) { final CellSignalStrengthLte lte = ((CellInfoLte) info).getCellSignalStrength(); final CellIdentityLte identityLte = ((CellInfoLte) info).getCellIdentity(); // Signal Strength pDevice.mCell.setDBM(lte.getDbm()); pDevice.mCell.setTimingAdvance(lte.getTimingAdvance()); // Cell Identity pDevice.mCell.setMCC(identityLte.getMcc()); pDevice.mCell.setMNC(identityLte.getMnc()); pDevice.mCell.setCID(identityLte.getCi()); } else if (lCurrentApiVersion >= Build.VERSION_CODES.JELLY_BEAN_MR2 && info instanceof CellInfoWcdma) { final CellSignalStrengthWcdma wcdma = ((CellInfoWcdma) info).getCellSignalStrength(); final CellIdentityWcdma identityWcdma = ((CellInfoWcdma) info).getCellIdentity(); // Signal Strength pDevice.mCell.setDBM(wcdma.getDbm()); // Cell Identity pDevice.mCell.setLAC(identityWcdma.getLac()); pDevice.mCell.setMCC(identityWcdma.getMcc()); pDevice.mCell.setMNC(identityWcdma.getMnc()); pDevice.mCell.setCID(identityWcdma.getCid()); pDevice.mCell.setPSC(identityWcdma.getPsc()); } else { Log.i(TAG, mTAG + "Unknown type of cell signal!" + "\n ClassName: " + info.getClass().getSimpleName() + "\n ToString: " + info.toString()); } if (pDevice.mCell.isValid()) { break; } } } } catch (NullPointerException npe) { Log.e(TAG, mTAG + "loadCellInfo: Unable to obtain cell signal information: ", npe); } }
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) public static void fill(TheDictionary map, CellIdentityWcdma value) throws Exception { if (value != null) { map.put("type", "3"); int i; i = value.getMcc(); if (i != Integer.MAX_VALUE && i > 0 && i < 1000) map.put("mcc", i); i = value.getMnc(); if (i != Integer.MAX_VALUE && i > 0 && i < 1000) map.put("mnc", i); i = value.getLac(); if (i != Integer.MAX_VALUE && i > 0) map.put("lac", i); i = value.getPsc(); if (i != Integer.MAX_VALUE && i > 0) map.put("psc", i); i = value.getCid(); if (i != Integer.MAX_VALUE && i > 0) { if (i >= 0x10000) { map.put("rncid", i / 0x10000); i %= 0x10000; } map.put("cid", i); } } }
public CellIdentity(CellIdentityWcdma cellIdentity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { this.setChannelNumber(cellIdentity.getUarfcn()); } this.setMnc(cellIdentity.getMnc()); this.setMcc(cellIdentity.getMcc()); this.setLocationId(cellIdentity.getLac()); this.setAreaCode(cellIdentity.getCid()); this.setScramblingCode(cellIdentity.getPsc()); }
private static CommonCellInfo toCellularInfo(CellInfoWcdma cellInfo) { CommonCellInfo res = new CommonCellInfo(); CellIdentityWcdma identityWcdma = cellInfo.getCellIdentity(); CellSignalStrength signalStrength = cellInfo.getCellSignalStrength(); res.setType(WCDMA); res.setCid(identityWcdma.getCid()); res.setLac(identityWcdma.getLac()); res.setMcc(identityWcdma.getMcc()); res.setMnc(identityWcdma.getMnc()); res.setDbm(valdiateDbm(signalStrength.getDbm())); res.setLevel(signalStrength.getLevel()); return res; }
/** * Converts CellInfoWcdma into JSON * Some devices may not work correctly: * - Reference 1: https://code.google.com/p/android/issues/detail?id=191492 * - Reference 2: http://stackoverflow.com/questions/17815062/cellidentitygsm-on-android * @param cellInfo CellInfoWcdma * @return JSON */ public static String cellInfoWCDMAJSON(CellInfoWcdma cellInfo, boolean returnSignalStrength){ final Calendar calendar = Calendar.getInstance(); final JSONObject json = new JSONObject(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 && cellInfo != null) { try { json.put("provider", CELLINFO_PROVIDER); json.put("type", WCDMA); json.put("timestamp", calendar.getTimeInMillis()); final CellIdentityWcdma identityWcdma = cellInfo.getCellIdentity(); json.put("cid", identityWcdma.getCid()); json.put("lac", identityWcdma.getLac()); json.put("mcc", identityWcdma.getMcc()); json.put("mnc", identityWcdma.getMnc()); json.put("psc", identityWcdma.getPsc()); if (returnSignalStrength){ final JSONObject jsonSignalStrength = new JSONObject(); final CellSignalStrengthWcdma cellSignalStrengthWcdma = cellInfo.getCellSignalStrength(); jsonSignalStrength.put("asuLevel", cellSignalStrengthWcdma.getAsuLevel()); jsonSignalStrength.put("dbm", cellSignalStrengthWcdma.getDbm()); jsonSignalStrength.put("level", cellSignalStrengthWcdma.getLevel()); json.put("cellSignalStrengthWcdma", jsonSignalStrength); } } catch(JSONException exc) { logJSONException(exc); } } return json.toString(); }
public static SubjectFactory<CellIdentityWcdmaSubject, CellIdentityWcdma> type() { return new SubjectFactory<CellIdentityWcdmaSubject, CellIdentityWcdma>() { @Override public CellIdentityWcdmaSubject getSubject(FailureStrategy fs, CellIdentityWcdma that) { return new CellIdentityWcdmaSubject(fs, that); } }; }
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) public boolean isValid(CellIdentityWcdma cell) { boolean valid = (isCidInRange(cell.getCid()) && isLacInRange(cell.getLac()) && isMncInRange(cell.getMnc()) && isMccInRange(cell.getMcc()) && isPscInRange(cell.getPsc())); if (!valid) { Log.w("isValid(): Invalid CellIdentityWcdma [mcc=%s, mnc=%s, lac=%s, cid=%s, psc=%s]", cell.getMcc(), cell.getMnc(), cell.getLac(), cell.getCid(), cell.getPsc()); Log.w("isValid(): Invalid CellIdentityWcdma %s", cell); } return valid; }
public static void loadCellInfo(TelephonyManager tm, Device pDevice) { int lCurrentApiVersion = Build.VERSION.SDK_INT; try { if (pDevice.cell == null) { pDevice.cell = new Cell(); } List<CellInfo> cellInfoList = tm.getAllCellInfo(); if (cellInfoList != null) { for (final CellInfo info : cellInfoList) { //Network Type pDevice.cell.setNetType(tm.getNetworkType()); if (info instanceof CellInfoGsm) { final CellSignalStrengthGsm gsm = ((CellInfoGsm) info).getCellSignalStrength(); final CellIdentityGsm identityGsm = ((CellInfoGsm) info).getCellIdentity(); // Signal Strength pDevice.cell.setDbm(gsm.getDbm()); // [dBm] // Cell Identity pDevice.cell.setCellId(identityGsm.getCid()); pDevice.cell.setMobileCountryCode(identityGsm.getMcc()); pDevice.cell.setMobileNetworkCode(identityGsm.getMnc()); pDevice.cell.setLocationAreaCode(identityGsm.getLac()); } else if (info instanceof CellInfoCdma) { final CellSignalStrengthCdma cdma = ((CellInfoCdma) info).getCellSignalStrength(); final CellIdentityCdma identityCdma = ((CellInfoCdma) info).getCellIdentity(); // Signal Strength pDevice.cell.setDbm(cdma.getDbm()); // Cell Identity pDevice.cell.setCellId(identityCdma.getBasestationId()); pDevice.cell.setMobileNetworkCode(identityCdma.getSystemId()); pDevice.cell.setLocationAreaCode(identityCdma.getNetworkId()); pDevice.cell.setSid(identityCdma.getSystemId()); } else if (info instanceof CellInfoLte) { final CellSignalStrengthLte lte = ((CellInfoLte) info).getCellSignalStrength(); final CellIdentityLte identityLte = ((CellInfoLte) info).getCellIdentity(); // Signal Strength pDevice.cell.setDbm(lte.getDbm()); pDevice.cell.setTimingAdvance(lte.getTimingAdvance()); // Cell Identity pDevice.cell.setMobileCountryCode(identityLte.getMcc()); pDevice.cell.setMobileNetworkCode(identityLte.getMnc()); pDevice.cell.setCellId(identityLte.getCi()); } else if (lCurrentApiVersion >= Build.VERSION_CODES.JELLY_BEAN_MR2 && info instanceof CellInfoWcdma) { final CellSignalStrengthWcdma wcdma = ((CellInfoWcdma) info).getCellSignalStrength(); final CellIdentityWcdma identityWcdma = ((CellInfoWcdma) info).getCellIdentity(); // Signal Strength pDevice.cell.setDbm(wcdma.getDbm()); // Cell Identity pDevice.cell.setLocationAreaCode(identityWcdma.getLac()); pDevice.cell.setMobileCountryCode(identityWcdma.getMcc()); pDevice.cell.setMobileNetworkCode(identityWcdma.getMnc()); pDevice.cell.setCellId(identityWcdma.getCid()); pDevice.cell.setPrimaryScramblingCode(identityWcdma.getPsc()); } else { log.info("Unknown type of cell signal!" + "\n ClassName: " + info.getClass().getSimpleName() + "\n ToString: " + info.toString()); } if (pDevice.cell.isValid()) { break; } } } } catch (NullPointerException npe) { log.error("loadCellInfo: Unable to obtain cell signal information: ", npe); } }
/** * A valid wcdma cell must have cell id set * @param cdmaLocation {@link CdmaCellLocation} * @return true if valid cdma id */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) private boolean isValidWcdmaCell(final CellIdentityWcdma wcdmaInfo) { if (wcdmaInfo == null) { return false; } final Integer cid = wcdmaInfo.getCid(); return ((cid > -1) && (cid < Integer.MAX_VALUE)); }
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) private static VisibleCell getVisibleCellPostJellyBeanMr1( @Nullable CellInfo cellInfo, long elapsedTime, long currentTime) { if (cellInfo == null) { return VisibleCell.UNKNOWN_VISIBLE_CELL; } long cellInfoAge = elapsedTime - TimeUnit.NANOSECONDS.toMillis(cellInfo.getTimeStamp()); long cellTimestamp = currentTime - cellInfoAge; if (cellInfo instanceof CellInfoCdma) { CellIdentityCdma cellIdentityCdma = ((CellInfoCdma) cellInfo).getCellIdentity(); return VisibleCell.builder(VisibleCell.CDMA_RADIO_TYPE) .setCellId(cellIdentityCdma.getBasestationId()) .setLocationAreaCode(cellIdentityCdma.getNetworkId()) .setMobileNetworkCode(cellIdentityCdma.getSystemId()) .setTimestamp(cellTimestamp) .build(); } if (cellInfo instanceof CellInfoGsm) { CellIdentityGsm cellIdentityGsm = ((CellInfoGsm) cellInfo).getCellIdentity(); return VisibleCell.builder(VisibleCell.GSM_RADIO_TYPE) .setCellId(cellIdentityGsm.getCid()) .setLocationAreaCode(cellIdentityGsm.getLac()) .setMobileCountryCode(cellIdentityGsm.getMcc()) .setMobileNetworkCode(cellIdentityGsm.getMnc()) .setTimestamp(cellTimestamp) .build(); } if (cellInfo instanceof CellInfoLte) { CellIdentityLte cellIdLte = ((CellInfoLte) cellInfo).getCellIdentity(); return VisibleCell.builder(VisibleCell.LTE_RADIO_TYPE) .setCellId(cellIdLte.getCi()) .setMobileCountryCode(cellIdLte.getMcc()) .setMobileNetworkCode(cellIdLte.getMnc()) .setPhysicalCellId(cellIdLte.getPci()) .setTrackingAreaCode(cellIdLte.getTac()) .setTimestamp(cellTimestamp) .build(); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 && cellInfo instanceof CellInfoWcdma) { // CellInfoWcdma is only usable JB MR2 upwards. CellIdentityWcdma cellIdentityWcdma = ((CellInfoWcdma) cellInfo).getCellIdentity(); return VisibleCell.builder(VisibleCell.WCDMA_RADIO_TYPE) .setCellId(cellIdentityWcdma.getCid()) .setLocationAreaCode(cellIdentityWcdma.getLac()) .setMobileCountryCode(cellIdentityWcdma.getMcc()) .setMobileNetworkCode(cellIdentityWcdma.getMnc()) .setPrimaryScramblingCode(cellIdentityWcdma.getPsc()) .setTimestamp(cellTimestamp) .build(); } return VisibleCell.UNKNOWN_VISIBLE_CELL; }
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) private void getAllCellInfo(List<CellInfo> cellInfo) { // only for registered cells is returned identify // SlimKat in Galaxy Nexus - returns null :-/ // Honor 7 - returns empty list (not null), Dual SIM? if (cellInfo!=null) { if (Permissions.checkLocation(context.getApplicationContext())) { //PPApplication.logE("PhoneStateScanner.getAllCellInfo", "---- start ----------------------------"); for (CellInfo _cellInfo : cellInfo) { //PPApplication.logE("PhoneStateScanner.getAllCellInfo", "registered="+_cellInfo.isRegistered()); if (_cellInfo instanceof CellInfoGsm) { //PPApplication.logE("PhoneStateScanner.getAllCellInfo", "gsm info="+_cellInfo); CellIdentityGsm identityGsm = ((CellInfoGsm) _cellInfo).getCellIdentity(); if (identityGsm.getCid() != Integer.MAX_VALUE) { //PPApplication.logE("PhoneStateScanner.getAllCellInfo", "gsm mCid="+identityGsm.getCid()); if (_cellInfo.isRegistered()) { registeredCell = identityGsm.getCid(); lastConnectedTime = Calendar.getInstance().getTimeInMillis(); } } } else if (_cellInfo instanceof CellInfoLte) { //PPApplication.logE("PhoneStateScanner.getAllCellInfo", "lte info="+_cellInfo); CellIdentityLte identityLte = ((CellInfoLte) _cellInfo).getCellIdentity(); if (identityLte.getCi() != Integer.MAX_VALUE) { //PPApplication.logE("PhoneStateScanner.getAllCellInfo", "lte mCi="+identityLte.getCi()); if (_cellInfo.isRegistered()) { registeredCell = identityLte.getCi(); lastConnectedTime = Calendar.getInstance().getTimeInMillis(); } } } else if (_cellInfo instanceof CellInfoWcdma) { //PPApplication.logE("PhoneStateScanner.getAllCellInfo", "wcdma info="+_cellInfo); //if (android.os.Build.VERSION.SDK_INT >= 18) { CellIdentityWcdma identityWcdma = ((CellInfoWcdma) _cellInfo).getCellIdentity(); if (identityWcdma.getCid() != Integer.MAX_VALUE) { //PPApplication.logE("PhoneStateScanner.getAllCellInfo", "wcdma mCid=" + identityWcdma.getCid()); if (_cellInfo.isRegistered()) { registeredCell = identityWcdma.getCid(); lastConnectedTime = Calendar.getInstance().getTimeInMillis(); } } //} //else { // PPApplication.logE("PhoneStateScanner.getAllCellInfo", "wcdma mCid=not supported for API level < 18"); //} } else if (_cellInfo instanceof CellInfoCdma) { //PPApplication.logE("PhoneStateScanner.getAllCellInfo", "cdma info="+_cellInfo); CellIdentityCdma identityCdma = ((CellInfoCdma) _cellInfo).getCellIdentity(); if (identityCdma.getBasestationId() != Integer.MAX_VALUE) { //PPApplication.logE("PhoneStateScanner.getAllCellInfo", "wcdma mCid="+identityCdma.getBasestationId()); if (_cellInfo.isRegistered()) { registeredCell = identityCdma.getBasestationId(); lastConnectedTime = Calendar.getInstance().getTimeInMillis(); } } } //else { // PPApplication.logE("PhoneStateScanner.getAllCellInfo", "unknown info="+_cellInfo); //} } //PPApplication.logE("PhoneStateScanner.getAllCellInfo", "---- end ----------------------------"); PPApplication.logE("PhoneStateScanner.getAllCellInfo", "registeredCell=" + registeredCell); } } else PPApplication.logE("PhoneStateScanner.getAllCellInfo", "cell info is null"); }
/** * A valid wcdma cell must have cell id set * * @param wcdmaInfo {@link CellIdentityWcdma} * @return true if valid cdma id */ @TargetApi(JELLY_BEAN_MR2) private boolean isValidWcdmaCell(final CellIdentityWcdma wcdmaInfo) { if (wcdmaInfo == null) { return false; } final Integer cid = wcdmaInfo.getCid(); return ((cid > -1) && (cid < Integer.MAX_VALUE)); }
public CellInfoWcdmaAssert hasCellIdentity(CellIdentityWcdma cellIdentity) { isNotNull(); CellIdentityWcdma actualCellIdentity = actual.getCellIdentity(); assertThat(actualCellIdentity) // .overridingErrorMessage("Expected cell identity <%s> but was <%s>.", cellIdentity, actualCellIdentity) // .isEqualTo(cellIdentity); return this; }
public CellInfoWcdmaSubject hasCellIdentity(CellIdentityWcdma cellIdentity) { assertThat(actual().getCellIdentity()) .named("cell identity") .isEqualTo(cellIdentity); return this; }
private CellIdentityWcdmaSubject(FailureStrategy failureStrategy, CellIdentityWcdma subject) { super(failureStrategy, subject); }
/** * Adds or updates a cell tower. * <p> * If the cell tower is already in the list, its data is updated; if not, a * new entry is created. * <p> * This method will set the cell's identity data and generation, its signal * strength and whether it is the currently serving cell. * @return The new or updated entry. */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) public CellTowerGsm update(CellInfoWcdma cell) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) return null; CellIdentityWcdma cid = cell.getCellIdentity(); CellTowerGsm result = null; CellTowerGsm cand = this.get(cid.getMcc(), cid.getMnc(), cid.getLac(), cid.getCid()); if ((cand != null) && CellTower.matches(cid.getPsc(), cand.getPsc())) result = cand; if (result == null) { cand = this.get(cid.getPsc()); if ((cand != null) && ((cid.getMcc() == Integer.MAX_VALUE) || CellTower.matches(cid.getMcc(), cand.getMcc())) && ((cid.getMnc() == Integer.MAX_VALUE) || CellTower.matches(cid.getMnc(), cand.getMnc())) && ((cid.getLac() == Integer.MAX_VALUE) || CellTower.matches(cid.getLac(), cand.getLac())) && ((cid.getCid() == Integer.MAX_VALUE) ||CellTower.matches(cid.getCid(), cand.getCid()))) result = cand; } if (result == null) result = new CellTowerGsm(cid.getMcc(), cid.getMnc(), cid.getLac(), cid.getCid(), cid.getPsc()); if (result.getMcc() == CellTower.UNKNOWN) result.setMcc(cid.getMcc()); if (result.getMnc() == CellTower.UNKNOWN) result.setMnc(cid.getMnc()); if (result.getLac() == CellTower.UNKNOWN) result.setLac(cid.getLac()); if (result.getCid() == CellTower.UNKNOWN) result.setCid(cid.getCid()); if (result.getPsc() == CellTower.UNKNOWN) result.setPsc(cid.getPsc()); this.put(result.getText(), result); this.put(result.getAltText(), result); result.setCellInfo(true); result.setDbm(cell.getCellSignalStrength().getDbm()); result.setGeneration(3); result.setServing(cell.isRegistered()); if ((result.getText() == null) && (result.getAltText() == null)) Log.d(this.getClass().getSimpleName(), String.format("Added %d G cell with no data from CellInfoWcdma", result.getGeneration())); return result; }
public CellIdentityWcdmaAssert(CellIdentityWcdma actual) { super(actual, CellIdentityWcdmaAssert.class); }