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); } }
/** * Get current cell info * * @return cell information format as {@link String} */ public String getCellInfo() { if (DBG) Log.d(Config.TAG, TAG + "getCellInfo called"); String ret = null; List<CellInfo> listCellInfo = mTelMgr.getAllCellInfo(); if (listCellInfo != null) for (CellInfo a_Info : listCellInfo) { if (CellInfoCdma.class.isInstance(a_Info)) ret = ret + "\n Cell info cdma: " + a_Info.toString(); else if (CellInfoGsm.class.isInstance(a_Info)) ret = ret + "\n Cell info gsm: " + a_Info.toString(); else if (CellInfoLte.class.isInstance(a_Info)) { ret = ret + "\n Cell info lte: " + a_Info.toString(); CellInfoLte cellInfoLte = (CellInfoLte) a_Info; CellIdentityLte cellIdentity = cellInfoLte .getCellIdentity(); Log.d(Config.TAG, TAG + " LTE - " + cellIdentity.getCi() + cellIdentity.getTac() + cellIdentity.getPci()); } else if (CellInfoWcdma.class.isInstance(a_Info)) ret = ret + "\n Cell info : wcdma" + a_Info.toString(); } return ret; }
/** * @return Signal strength (in dbM) from {@link cellInfo}. Returns {@link * CellularSignalStrengthError#ERROR_NOT_SUPPORTED} if the signal strength is unavailable. */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) private static int getSignalStrengthDbm(CellInfo cellInfo) { if (cellInfo instanceof CellInfoCdma) { return ((CellInfoCdma) cellInfo).getCellSignalStrength().getDbm(); } if (cellInfo instanceof CellInfoGsm) { return ((CellInfoGsm) cellInfo).getCellSignalStrength().getDbm(); } if (cellInfo instanceof CellInfoLte) { return ((CellInfoLte) cellInfo).getCellSignalStrength().getDbm(); } if (cellInfo instanceof CellInfoWcdma) { return ((CellInfoWcdma) cellInfo).getCellSignalStrength().getDbm(); } return CellularSignalStrengthError.ERROR_NOT_SUPPORTED; }
/** * @return the signal level from {@link cellInfo}. Returns {@link * CellularSignalStrengthError#ERROR_NOT_SUPPORTED} if the signal * level is unavailable with lower value indicating lower signal strength. */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) private static int getSignalStrengthLevel(CellInfo cellInfo) { if (cellInfo instanceof CellInfoCdma) { return ((CellInfoCdma) cellInfo).getCellSignalStrength().getLevel(); } if (cellInfo instanceof CellInfoGsm) { return ((CellInfoGsm) cellInfo).getCellSignalStrength().getLevel(); } if (cellInfo instanceof CellInfoLte) { return ((CellInfoLte) cellInfo).getCellSignalStrength().getLevel(); } if (cellInfo instanceof CellInfoWcdma) { return ((CellInfoWcdma) cellInfo).getCellSignalStrength().getLevel(); } return CellularSignalStrengthError.ERROR_NOT_SUPPORTED; }
public CellInformationWrapper(CellInfo cellInfo) { setRegistered(cellInfo.isRegistered()); this.setTimeStamp(cellInfo.getTimeStamp()); if (cellInfo.getClass().equals(CellInfoLte.class)) { setTechnology(Technology.CONNECTION_4G); this.ci = new CellIdentity(((CellInfoLte) cellInfo).getCellIdentity()); this.cs = new CellSignalStrength(((CellInfoLte) cellInfo).getCellSignalStrength()); } else if (cellInfo.getClass().equals(CellInfoWcdma.class)) { setTechnology(Technology.CONNECTION_3G); this.ci = new CellIdentity(((CellInfoWcdma) cellInfo).getCellIdentity()); this.cs = new CellSignalStrength(((CellInfoWcdma) cellInfo).getCellSignalStrength()); } else if (cellInfo.getClass().equals(CellInfoGsm.class)) { setTechnology(Technology.CONNECTION_2G); this.ci = new CellIdentity(((CellInfoGsm) cellInfo).getCellIdentity()); this.cs = new CellSignalStrength(((CellInfoGsm) cellInfo).getCellSignalStrength()); } else if (cellInfo.getClass().equals(CellInfoCdma.class)) { setTechnology(Technology.CONNECTION_2G); this.ci = new CellIdentity(((CellInfoCdma) cellInfo).getCellIdentity()); this.cs = new CellSignalStrength(((CellInfoCdma) cellInfo).getCellSignalStrength()); } }
private static CommonCellInfo toCellularInfo(CellInfoGsm cellInfo) { CommonCellInfo res = new CommonCellInfo(); CellIdentityGsm identityGsm = cellInfo.getCellIdentity(); CellSignalStrength signalStrength = cellInfo.getCellSignalStrength(); res.setType(GSM); res.setCid(identityGsm.getCid()); res.setLac(identityGsm.getLac()); res.setMcc(identityGsm.getMcc()); res.setMnc(identityGsm.getMnc()); res.setDbm(valdiateDbm(signalStrength.getDbm())); res.setLevel(signalStrength.getLevel()); return res; }
private static CellInfo createCellInfo(VCell cell) { if (cell.type == 2) { // CDMA CellInfoCdma cdma = mirror.android.telephony.CellInfoCdma.ctor.newInstance(); CellIdentityCdma identityCdma = mirror.android.telephony.CellInfoCdma.mCellIdentityCdma.get(cdma); CellSignalStrengthCdma strengthCdma = mirror.android.telephony.CellInfoCdma.mCellSignalStrengthCdma.get(cdma); mirror.android.telephony.CellIdentityCdma.mNetworkId.set(identityCdma, cell.networkId); mirror.android.telephony.CellIdentityCdma.mSystemId.set(identityCdma, cell.systemId); mirror.android.telephony.CellIdentityCdma.mBasestationId.set(identityCdma, cell.baseStationId); mirror.android.telephony.CellSignalStrengthCdma.mCdmaDbm.set(strengthCdma, -74); mirror.android.telephony.CellSignalStrengthCdma.mCdmaEcio.set(strengthCdma, -91); mirror.android.telephony.CellSignalStrengthCdma.mEvdoDbm.set(strengthCdma, -64); mirror.android.telephony.CellSignalStrengthCdma.mEvdoSnr.set(strengthCdma, 7); return cdma; } else { // GSM CellInfoGsm gsm = mirror.android.telephony.CellInfoGsm.ctor.newInstance(); CellIdentityGsm identityGsm = mirror.android.telephony.CellInfoGsm.mCellIdentityGsm.get(gsm); CellSignalStrengthGsm strengthGsm = mirror.android.telephony.CellInfoGsm.mCellSignalStrengthGsm.get(gsm); mirror.android.telephony.CellIdentityGsm.mMcc.set(identityGsm, cell.mcc); mirror.android.telephony.CellIdentityGsm.mMnc.set(identityGsm, cell.mnc); mirror.android.telephony.CellIdentityGsm.mLac.set(identityGsm, cell.lac); mirror.android.telephony.CellIdentityGsm.mCid.set(identityGsm, cell.cid); mirror.android.telephony.CellSignalStrengthGsm.mSignalStrength.set(strengthGsm, 20); mirror.android.telephony.CellSignalStrengthGsm.mBitErrorRate.set(strengthGsm, 0); return gsm; } }
public boolean isValid(CellInfo cellInfo) { if (cellInfo instanceof CellInfoGsm) { CellInfoGsm gsmCellInfo = (CellInfoGsm) cellInfo; // If is compatible with API 17 hack (PSC on GSM) return true boolean wcdmaApi17Valid = getWcdmaValidator().isValid(gsmCellInfo.getCellIdentity()); if (wcdmaApi17Valid) return true; return getGsmValidator().isValid(gsmCellInfo.getCellIdentity()); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 && cellInfo instanceof CellInfoWcdma) { CellInfoWcdma wcdmaCellInfo = (CellInfoWcdma) cellInfo; return getWcdmaValidator().isValid(wcdmaCellInfo.getCellIdentity()); } if (cellInfo instanceof CellInfoLte) { CellInfoLte lteCellInfo = (CellInfoLte) cellInfo; return getLteValidator().isValid(lteCellInfo.getCellIdentity()); } if (cellInfo instanceof CellInfoCdma) { CellInfoCdma cdmaCellInfo = (CellInfoCdma) cellInfo; return getCdmaValidator().isValid(cdmaCellInfo.getCellIdentity()); } throw new UnsupportedOperationException("Cell identity type not supported `" + cellInfo.getClass().getName() + "`"); }
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) public static void fill(TheDictionary map, CellInfo value) throws Exception { if (value != null) { map.put("time_stamp", value.getTimeStamp()); map.put("registered", value.isRegistered()); if (value instanceof CellInfoCdma) { fill(map, ((CellInfoCdma) value).getCellIdentity()); fill(map, ((CellInfoCdma) value).getCellSignalStrength()); } else if (value instanceof CellInfoGsm) { fill(map, ((CellInfoGsm) value).getCellIdentity()); fill(map, ((CellInfoGsm) value).getCellSignalStrength()); } else if (value instanceof CellInfoWcdma) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { fill(map, ((CellInfoWcdma) value).getCellIdentity()); fill(map, ((CellInfoWcdma) value).getCellSignalStrength()); } } else if (value instanceof CellInfoLte) { fill(map, ((CellInfoLte) value).getCellIdentity()); fill(map, ((CellInfoLte) value).getCellSignalStrength()); } else { map.put("class", value.getClass().getName()); map.put("string", value.toString()); } } }
public ArrayList<CommonCellInfo> toCellularInfo(List<CellInfo> cellInfoList) { final ArrayList<CommonCellInfo> res = new ArrayList<CommonCellInfo>(); if (cellInfoList == null) { return res; } for (CellInfo cellInfo : cellInfoList) { if (!cellInfo.isRegistered()) { continue; } //Wcdma : Wideband Code Division Multiple Access : multiplexage par code à large bande if (cellInfo instanceof CellInfoWcdma) { CellInfoWcdma cellInfoWcdma = (CellInfoWcdma) cellInfo; res.add(toCellularInfo(cellInfoWcdma)); } if (cellInfo instanceof CellInfoGsm) { final CellInfoGsm cellInfoGsm = (CellInfoGsm) cellInfo; res.add(toCellularInfo(cellInfoGsm)); } if (cellInfo instanceof CellInfoLte) { final CellInfoLte cellInfoLte = (CellInfoLte) cellInfo; res.add(toCellularInfo(cellInfoLte)); } // TODO: gérer CDMA } return res; }
/** * Converts CellInfoGsm into JSON * @param cellInfo CellInfoGsm * @return JSON */ public static String cellInfoGSMJSON(CellInfoGsm 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", GSM); json.put("timestamp", calendar.getTimeInMillis()); final CellIdentityGsm identityGsm = cellInfo.getCellIdentity(); json.put("cid", identityGsm.getCid()); json.put("lac", identityGsm.getLac()); json.put("mcc", identityGsm.getMcc()); json.put("mnc", identityGsm.getMnc()); if (returnSignalStrength){ final JSONObject jsonSignalStrength = new JSONObject(); final CellSignalStrengthGsm cellSignalStrengthGsm = cellInfo.getCellSignalStrength(); jsonSignalStrength.put("asuLevel", cellSignalStrengthGsm.getAsuLevel()); jsonSignalStrength.put("dbm", cellSignalStrengthGsm.getDbm()); jsonSignalStrength.put("level", cellSignalStrengthGsm.getLevel()); json.put("cellSignalStrengthGsm", jsonSignalStrength); } } catch(JSONException exc) { logJSONException(exc); } } return json.toString(); }
private static void processCellInfos(List<CellInfo> cellInfos){ if(cellInfos != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ for(CellInfo cellInfo : cellInfos){ if(cellInfo instanceof CellInfoWcdma){ final CellInfoWcdma cellInfoWcdma = (CellInfoWcdma) cellInfo; sendCallback(PluginResult.Status.OK, JSONHelper.cellInfoWCDMAJSON(cellInfoWcdma, _returnSignalStrength)); } if(cellInfo instanceof CellInfoGsm){ final CellInfoGsm cellInfoGsm = (CellInfoGsm) cellInfo; sendCallback(PluginResult.Status.OK, JSONHelper.cellInfoGSMJSON(cellInfoGsm, _returnSignalStrength)); } if(cellInfo instanceof CellInfoCdma){ final CellInfoCdma cellIdentityCdma = (CellInfoCdma) cellInfo; sendCallback(PluginResult.Status.OK, JSONHelper.cellInfoCDMAJSON(cellIdentityCdma, _returnSignalStrength)); } if(cellInfo instanceof CellInfoLte){ final CellInfoLte cellInfoLte = (CellInfoLte) cellInfo; sendCallback(PluginResult.Status.OK, JSONHelper.cellInfoLTEJSON(cellInfoLte, _returnSignalStrength)); } Log.d(TAG,cellInfo.toString()); } } else { Log.e(TAG, "CellInfoLocation returning null. Is it supported on this phone?"); // There are several reasons as to why cell location data would be null. // * could be an older device running an unsupported version of the Android OS // * could be a device that doesn't support this capability. // * could be incorrect permissions: ACCESS_COARSE_LOCATION sendCallback(PluginResult.Status.ERROR, JSONHelper.errorJSON(CELLINFO_PROVIDER, ErrorMessages.CELL_DATA_IS_NULL())); } }
public static SubjectFactory<CellInfoGsmSubject, CellInfoGsm> type() { return new SubjectFactory<CellInfoGsmSubject, CellInfoGsm>() { @Override public CellInfoGsmSubject getSubject(FailureStrategy fs, CellInfoGsm that) { return new CellInfoGsmSubject(fs, that); } }; }
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); } }
@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; }
/** * Create a measure from current CellInfo * * @return a current measure */ public Measure createMeasure() { // Create a measure Measure m = new Measure(); m.timestamp = System.currentTimeMillis(); TelephonyManager tel = (TelephonyManager) app.getSystemService(Context.TELEPHONY_SERVICE); for (CellInfo ci : tel.getAllCellInfo()) { TowerInfo ti = new TowerInfo(); if (ci instanceof CellInfoCdma) { ti.type = TowerInfo.CDMA; ti.id = ((CellInfoCdma) ci).getCellIdentity().getBasestationId(); ti.psc = -1; ti.dbm = ((CellInfoCdma) ci).getCellSignalStrength().getDbm(); } else if (ci instanceof CellInfoGsm) { ti.type = TowerInfo.GSM; ti.id = ((CellInfoGsm) ci).getCellIdentity().getCid(); ti.psc = -1; // undefined for GSM ti.dbm = ((CellInfoGsm) ci).getCellSignalStrength().getDbm(); } else if (ci instanceof CellInfoLte) { ti.type = TowerInfo.LTE; ti.id = ((CellInfoLte) ci).getCellIdentity().getCi(); ti.psc = -1; ti.dbm = ((CellInfoLte) ci).getCellSignalStrength().getDbm(); } else if (ci instanceof CellInfoWcdma) { ti.type = TowerInfo.WCDMA; ti.id = ((CellInfoWcdma) ci).getCellIdentity().getCid(); ti.psc = ((CellInfoWcdma) ci).getCellIdentity().getPsc(); ti.dbm = ((CellInfoWcdma) ci).getCellSignalStrength().getDbm(); } m.towerInfos.add(ti); } return m; }
@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"); }
public static CellData parseData(CellInfo cellInfo) { if (cellInfo instanceof CellInfoGsm) { return parseCellGsm((CellInfoGsm) cellInfo); } else if (cellInfo instanceof CellInfoCdma) { return parseCellCdma((CellInfoCdma) cellInfo); } else if (cellInfo instanceof CellInfoWcdma) { return parseCellWcdma((CellInfoWcdma) cellInfo); } else if (cellInfo instanceof CellInfoLte) { return parseCellLte((CellInfoLte) cellInfo); } else { return null; } }
private static CellData parseCellGsm(CellInfoGsm cellInfo) { CellData cellData = new CellData(CellData.Type.GSM); cellData.dbm = cellInfo.getCellSignalStrength().getDbm(); cellData.code = String.format(Locale.US, "%d-%d", cellInfo.getCellIdentity().getMcc(), cellInfo.getCellIdentity().getMnc()); return cellData; }
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) public static void fill(TheDictionary map, CellInfo value) throws Exception { if (value != null) { map.put("time_stamp", value.getTimeStamp()); map.put("registered", value.isRegistered()); if (value instanceof CellInfoCdma) { fill(map, ((CellInfoCdma)value).getCellIdentity()); fill(map, ((CellInfoCdma)value).getCellSignalStrength()); } else if (value instanceof CellInfoGsm) { fill(map, ((CellInfoGsm)value).getCellIdentity()); fill(map, ((CellInfoGsm)value).getCellSignalStrength()); } else if (value instanceof CellInfoWcdma) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { fill(map, ((CellInfoWcdma)value).getCellIdentity()); fill(map, ((CellInfoWcdma)value).getCellSignalStrength()); } } else if (value instanceof CellInfoLte) { fill(map, ((CellInfoLte)value).getCellIdentity()); fill(map, ((CellInfoLte)value).getCellSignalStrength()); } else { map.put("class", value.getClass().getName()); map.put("string", value.toString()); } } }
/** * Adds or updates a list of cell towers. * <p> * This method first calls {@link #removeSource(int)} with * {@link com.vonglasow.michael.satstat.data.CellTower#SOURCE_CELL_INFO} as * its argument. Then it iterates through all entries in {@code cells} and * updates each entry that is of type {@link android.telephony.CellInfoGsm} * or {@link android.telephony.CellInfoWcdma} by calling * {@link #update(CellInfoGsm)} or {@link #update(CellInfoWcdma)} * (depending on type), passing that entry as the argument. */ public void updateAll(List<CellInfo> cells) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) return; this.removeSource(CellTower.SOURCE_CELL_INFO); if (cells == null) return; for (CellInfo cell : cells) if (cell instanceof CellInfoGsm) this.update((CellInfoGsm) cell); else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) if (cell instanceof CellInfoWcdma) this.update((CellInfoWcdma) cell); }
private CellInfoGsmSubject(FailureStrategy failureStrategy, CellInfoGsm subject) { super(failureStrategy, subject); }
@Override public void onCellInfoChanged(List<CellInfo> cellInfoList) { super.onCellInfoChanged(cellInfoList); if (cellInfoList == null) { //Log.e(Tag,"onCellInfoChanged is null"); return; } //Log.e(Tag,"onCellInfoChanged size "+cellInfoList.size()); for (CellInfo cellInfo : cellInfoList) { if (!cellInfo.isRegistered()) continue; if (cellInfo instanceof CellInfoLte) { CellInfoLte lteinfo = (CellInfoLte) cellInfo; lte_MCC = lteinfo.getCellIdentity().getMcc(); lte_MNC = lteinfo.getCellIdentity().getMnc(); lte_CI = lteinfo.getCellIdentity().getCi(); lte_PCI = lteinfo.getCellIdentity().getPci(); lte_TAC = lteinfo.getCellIdentity().getTac(); //Log.e(Tag,lteinfo.toString()); } else if (cellInfo instanceof CellInfoCdma) { CellInfoCdma cdmainfo = (CellInfoCdma) cellInfo; cdma_SID = cdmainfo.getCellIdentity().getSystemId(); cdma_NID = cdmainfo.getCellIdentity().getNetworkId(); cdma_BSID = cdmainfo.getCellIdentity().getBasestationId(); //Log.e(Tag,cdmainfo.toString()); } else if (cellInfo instanceof CellInfoGsm) { CellInfoGsm gsmInfo = (CellInfoGsm) cellInfo; gsm_MCC = gsmInfo.getCellIdentity().getMcc(); gsm_MNC = gsmInfo.getCellIdentity().getMnc(); gsm_CID = gsmInfo.getCellIdentity().getCid(); gsm_LAC = gsmInfo.getCellIdentity().getLac(); } else if (cellInfo instanceof CellInfoWcdma) { CellInfoWcdma wcdmaInfo = (CellInfoWcdma) cellInfo; wcdma_MCC = wcdmaInfo.getCellIdentity().getMcc(); wcdma_MNC = wcdmaInfo.getCellIdentity().getMnc(); wcdma_CID = wcdmaInfo.getCellIdentity().getCid(); wcdma_LAC = wcdmaInfo.getCellIdentity().getLac(); wcdma_PSC = wcdmaInfo.getCellIdentity().getPsc(); } } ((MainActivity)mcontext).mSectionsPagerAdapter.notifyDataSetChanged(); }
private void getCellIdentity() { List<CellInfo> cellInfoList = mTM.getAllCellInfo(); if (cellInfoList == null) { //Log.e(Tag,"getAllCellInfo is null"); return; } //Log.e(Tag,"getAllCellInfo size "+cellInfoList.size()); for (CellInfo cellInfo : cellInfoList) { if (!cellInfo.isRegistered()) continue; if (cellInfo instanceof CellInfoLte) { CellInfoLte lteinfo = (CellInfoLte) cellInfo; lte_MCC = lteinfo.getCellIdentity().getMcc(); lte_MNC = lteinfo.getCellIdentity().getMnc(); lte_CI = lteinfo.getCellIdentity().getCi(); lte_PCI = lteinfo.getCellIdentity().getPci(); lte_TAC = lteinfo.getCellIdentity().getTac(); //Log.e(Tag,lteinfo.toString()); } else if (cellInfo instanceof CellInfoCdma) { CellInfoCdma cdmainfo = (CellInfoCdma) cellInfo; cdma_SID = cdmainfo.getCellIdentity().getSystemId(); cdma_NID = cdmainfo.getCellIdentity().getNetworkId(); cdma_BSID = cdmainfo.getCellIdentity().getBasestationId(); //Log.e(Tag,cdmainfo.toString()); } else if (cellInfo instanceof CellInfoGsm) { CellInfoGsm gsmInfo = (CellInfoGsm) cellInfo; gsm_MCC = gsmInfo.getCellIdentity().getMcc(); gsm_MNC = gsmInfo.getCellIdentity().getMnc(); gsm_CID = gsmInfo.getCellIdentity().getCid(); gsm_LAC = gsmInfo.getCellIdentity().getLac(); } else if (cellInfo instanceof CellInfoWcdma) { CellInfoWcdma wcdmaInfo = (CellInfoWcdma) cellInfo; wcdma_MCC = wcdmaInfo.getCellIdentity().getMcc(); wcdma_MNC = wcdmaInfo.getCellIdentity().getMnc(); wcdma_CID = wcdmaInfo.getCellIdentity().getCid(); wcdma_LAC = wcdmaInfo.getCellIdentity().getLac(); wcdma_PSC = wcdmaInfo.getCellIdentity().getPsc(); } } }
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) private void startScan() { logMessage("starting tower scan... "); Scan scan = new Scan(); // TODO: Get location from user? scan.setLocation(lastScanName); // TODO: use actual GPS Coordinates scan.setLatitude(lastScanLat); scan.setLongitude(lastScanLon); long scan_id = db.createScan(scan); List<CellInfo> cellInfos = (List<CellInfo>) this.telephonyManager .getAllCellInfo(); // TODO: better error handling of null cellinfos if (cellInfos != null) { for (CellInfo cellInfo : cellInfos) { if (cellInfo instanceof CellInfoGsm) { CellInfoGsm cellInfoGsm = (CellInfoGsm) cellInfo; CellIdentityGsm cellIdentity = cellInfoGsm .getCellIdentity(); CellSignalStrengthGsm cellSignalStrengthGsm = cellInfoGsm .getCellSignalStrength(); int dbmLevel = cellSignalStrengthGsm.getDbm(); com.spideyapp.sqlite.model.CellInfo cell = new com.spideyapp.sqlite.model.CellInfo( cellIdentity.getCid(), cellIdentity.getLac(), cellIdentity.getMcc(), cellIdentity.getMnc(),dbmLevel); db.createCell(cell, scan_id); shareCellInfo (cell); } } } }
/** * 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, its signal strength and * whether it is the currently serving cell. If the API level is 18 or * higher, it will also set the generation. * @return The new or updated entry. */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) public CellTowerGsm update(CellInfoGsm cell) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) return null; CellIdentityGsm 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()); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) result.setGeneration(2); 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 CellInfoGsm", result.getGeneration())); return result; }
public CellInfoGsmAssert(CellInfoGsm actual) { super(actual, CellInfoGsmAssert.class); }