List of usage examples for android.telephony.cdma CdmaCellLocation getBaseStationId
public int getBaseStationId()
From source file:com.secupwn.aimsicd.service.CellTracker.java
/** * Add entries to the {@link com.secupwn.aimsicd.data.model.Measure Measure} realm *///from ww w.j a v a 2s . c om public void onLocationChanged(Location loc) { // TODO: See issue #555 (DeviceApi17.java is using API 18 CellInfoWcdma calls. if (Build.VERSION.SDK_INT > 17) { DeviceApi18.loadCellInfo(tm, device); } if (!device.cell.isValid()) { CellLocation cellLocation = tm.getCellLocation(); if (cellLocation != null) { switch (device.getPhoneId()) { case TelephonyManager.PHONE_TYPE_NONE: case TelephonyManager.PHONE_TYPE_SIP: case TelephonyManager.PHONE_TYPE_GSM: GsmCellLocation gsmCellLocation = (GsmCellLocation) cellLocation; device.cell.setCellId(gsmCellLocation.getCid()); // CID device.cell.setLocationAreaCode(gsmCellLocation.getLac()); // LAC device.cell.setPrimaryScramblingCode(gsmCellLocation.getPsc()); // PSC break; case TelephonyManager.PHONE_TYPE_CDMA: CdmaCellLocation cdmaCellLocation = (CdmaCellLocation) cellLocation; device.cell.setCellId(cdmaCellLocation.getBaseStationId()); // BSID ?? device.cell.setLocationAreaCode(cdmaCellLocation.getNetworkId()); // NID device.cell.setSid(cdmaCellLocation.getSystemId()); // SID device.cell.setMobileNetworkCode(cdmaCellLocation.getSystemId()); // MNC <== BUG!?? break; } } } if (loc != null && (Double.doubleToRawLongBits(loc.getLatitude()) != 0 && Double.doubleToRawLongBits(loc.getLongitude()) != 0)) { device.cell.setLon(loc.getLongitude()); // gpsd_lon device.cell.setLat(loc.getLatitude()); // gpsd_lat device.cell.setSpeed(loc.getSpeed()); // speed // TODO: Remove, we're not using it! device.cell.setAccuracy(loc.getAccuracy()); // gpsd_accu device.cell.setBearing(loc.getBearing()); // -- [deg]?? // TODO: Remove, we're not using it! device.setLastLocation(loc); // // Store last known location in preference SharedPreferences.Editor prefsEditor; prefsEditor = prefs.edit(); prefsEditor.putString(context.getString(R.string.data_last_lat_lon), String.valueOf(loc.getLatitude()) + ":" + String.valueOf(loc.getLongitude())); prefsEditor.apply(); // This only logs a BTS if we have GPS lock // TODO: Is correct behaviour? We should consider logging all cells, even without GPS. if (trackingCell) { // This also checks that the locationAreaCode are cid are not in DB before inserting @Cleanup Realm realm = Realm.getDefaultInstance(); dbHelper.insertBTS(realm, device.cell); } } }
From source file:com.secupwn.aimsicd.service.CellTracker.java
/** * I removed the timer that activated this code and now the code will be run when * the cell changes so it will detect faster rather than using a timer that might * miss an imsi catcher, also says cpu rather than refreshing every x seconds. * * original comments below from xLaMbChOpSx * * * Description: (From xLaMbChOpSx commit comment) * * Initial implementation for detection method 1 to compare the CID & LAC with the Cell * Information Table contents as an initial implementation for detection of a changed LAC, * once OCID issues (API key use etc) have been finalised this detection method can be * extended to include checking of external data. * * REMOVED: refresh timer info//from w w w. j a v a 2s .c o m * * As I have no real way of testing this I require testing by other project members who * do have access to equipment or an environment where a changing LAC can be simulated * thus confirming the accuracy of this implementation. * * Presently this will only invoke the MEDIUM threat level through the notification and * does not fully implement the capturing and score based method as per the issue details * once further testing is complete the alert and tracking of information can be refined. * * See: * https://github.com/xLaMbChOpSx/Android-IMSI-Catcher-Detector/commit/43ae77e2a0cad10dfd50f92da5a998f9ece95b38 * https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/issues/91#issuecomment-64391732 * * Short explanation: * * This is a polling mechanism for getting the LAC/CID and location * info for the currently connected cell. * * Variables: * FIXED: now updates on cell change rather than a timer * There is a "timer" here (REFRESH_RATE), what exactly is it timing? * "Every REFRESH_RATE seconds, get connected cell details." * * Issues: [ ] We shouldn't do any detection here! * [ ] We might wanna use a listener to do this? * Are there any reasons why not using a listener? * * ChangeLog: * 2015-03-03 E:V:A Changed getProp() to use TinyDB (SharedPreferences) * 2015-0x-xx banjaxbanjo Update: ??? (hey dude what did you do?) * */ public void compareLac(CellLocation location) { @Cleanup Realm realm = Realm.getDefaultInstance(); switch (device.getPhoneId()) { case TelephonyManager.PHONE_TYPE_NONE: case TelephonyManager.PHONE_TYPE_SIP: case TelephonyManager.PHONE_TYPE_GSM: GsmCellLocation gsmCellLocation = (GsmCellLocation) location; if (gsmCellLocation != null) { monitorCell.setLocationAreaCode(gsmCellLocation.getLac()); monitorCell.setCellId(gsmCellLocation.getCid()); // Check if LAC is ok boolean lacOK = dbHelper.checkLAC(realm, monitorCell); if (!lacOK) { changedLAC = true; dbHelper.toEventLog(realm, 1, "Changing LAC"); // Detection Logs are made in checkLAC() vibrate(100, Status.MEDIUM); } else { changedLAC = false; } if (tinydb.getBoolean("ocid_downloaded")) { if (!dbHelper.openCellExists(realm, monitorCell.getCellId())) { dbHelper.toEventLog(realm, 2, "CID not in Import realm"); log.info("ALERT: Connected to unknown CID not in Import realm: " + monitorCell.getCellId()); vibrate(100, Status.MEDIUM); cellIdNotInOpenDb = true; } else { cellIdNotInOpenDb = false; } } } break; case TelephonyManager.PHONE_TYPE_CDMA: CdmaCellLocation cdmaCellLocation = (CdmaCellLocation) location; if (cdmaCellLocation != null) { monitorCell.setLocationAreaCode(cdmaCellLocation.getNetworkId()); monitorCell.setCellId(cdmaCellLocation.getBaseStationId()); boolean lacOK = dbHelper.checkLAC(realm, monitorCell); if (!lacOK) { changedLAC = true; /*dbHelper.insertEventLog( MiscUtils.getCurrentTimeStamp(), monitorCell.getLAC(), monitorCell.getCid(), monitorCell.getPSC(),//This is giving weird values like 21478364... is this right? String.valueOf(monitorCell.getLat()), String.valueOf(monitorCell.getLon()), (int)monitorCell.getAccuracy(), 1, "Changing LAC" );*/ dbHelper.toEventLog(realm, 1, "Changing LAC"); } else { changedLAC = false; } } } setNotification(); }
From source file:org.restcomm.app.qoslib.Services.LibPhoneStateListener.java
private void checkCDMACellSID(CellLocation cell) { if (cell instanceof CdmaCellLocation) { CdmaCellLocation cdmaCell = (CdmaCellLocation) cell; if (cdmaCell.getSystemId() <= 0) { Field getSIDPointer = null; Field getNIDPointer = null; int SID = 0, NID = 0, BID = cdmaCell.getBaseStationId(); try { getSIDPointer = mPhoneState.previousServiceStateObj.getClass().getDeclaredField("mSystemId"); if (getSIDPointer != null) { getSIDPointer.setAccessible(true); SID = (int) getSIDPointer.getInt(cdmaCell); }/* www. j a va2s.c om*/ getNIDPointer = mPhoneState.previousServiceStateObj.getClass().getDeclaredField("mNetworkId"); if (getNIDPointer != null) { getNIDPointer.setAccessible(true); NID = (int) getNIDPointer.getInt(cdmaCell); } cdmaCell.setCellLocationData(BID, cdmaCell.getBaseStationLatitude(), cdmaCell.getBaseStationLongitude(), SID, NID); // Update the SID and NID that we read from teh Servicestate } catch (Exception e) { //MMCLogger.logToFile(MMCLogger.Level.ERROR, TAG, "checkInnerGsmCellLocation","Field does not exist - mGsmCellLoc"); } } } }