Example usage for android.telephony.cdma CdmaCellLocation getBaseStationId

List of usage examples for android.telephony.cdma CdmaCellLocation getBaseStationId

Introduction

In this page you can find the example usage for android.telephony.cdma CdmaCellLocation getBaseStationId.

Prototype

public int getBaseStationId() 

Source Link

Usage

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");
            }
        }
    }
}