Example usage for android.telephony.gsm GsmCellLocation getLac

List of usage examples for android.telephony.gsm GsmCellLocation getLac

Introduction

In this page you can find the example usage for android.telephony.gsm GsmCellLocation getLac.

Prototype

public int getLac() 

Source Link

Usage

From source file:com.samknows.measurement.environment.CellTowersData.java

private void addCellData(List<String> list) {
    DCSStringBuilder builder = new DCSStringBuilder();

    if (cellLocation instanceof GsmCellLocation) {
        GsmCellLocation gsmLocation = (GsmCellLocation) cellLocation;
        builder.append(ID + GSM + VERSION);
        builder.append(time / 1000);//from   ww w.j a  v  a2s  .co  m
        builder.append(GSM);
        builder.append(gsmLocation.getCid());
        builder.append(gsmLocation.getLac());
        builder.append(Build.VERSION.SDK_INT >= 9 ? gsmLocation.getPsc() : -1);

    } else if (cellLocation instanceof CdmaCellLocation) {
        CdmaCellLocation cdmaLocation = (CdmaCellLocation) cellLocation;
        builder.append(ID + CDMA);
        builder.append(time / 1000);
        builder.append(CDMA);
        builder.append(cdmaLocation.getBaseStationId());
        builder.append(cdmaLocation.getBaseStationLatitude());
        builder.append(cdmaLocation.getBaseStationLongitude());
        builder.append(cdmaLocation.getNetworkId());
        builder.append(cdmaLocation.getSystemId());
    }

    if (signal.isGsm()) {
        builder.append(signal.getGsmSignalStrength());
        builder.append(signal.getGsmBitErrorRate());
    } else {
        builder.append(signal.getCdmaDbm());
        builder.append(signal.getCdmaEcio());
    }
    list.add(builder.build());
}

From source file:org.mozilla.mozstumbler.service.scanners.cellscanner.CellInfo.java

void setCellLocation(CellLocation cl, int networkType, String networkOperator, Integer gsmSignalStrength,
        Integer cdmaRssi) {//  ww w  .j  a  v a2s . c  o m
    if (cl instanceof GsmCellLocation) {
        final int lac, cid;
        final GsmCellLocation gcl = (GsmCellLocation) cl;

        reset();
        mCellRadio = getCellRadioTypeName(networkType);
        setNetworkOperator(networkOperator);

        lac = gcl.getLac();
        cid = gcl.getCid();
        if (lac >= 0)
            mLac = lac;
        if (cid >= 0)
            mCid = cid;

        if (Build.VERSION.SDK_INT >= 9) {
            final int psc = gcl.getPsc();
            if (psc >= 0)
                mPsc = psc;
        }

        if (gsmSignalStrength != null) {
            mAsu = gsmSignalStrength;
        }
    } else if (cl instanceof CdmaCellLocation) {
        final CdmaCellLocation cdl = (CdmaCellLocation) cl;

        reset();
        mCellRadio = getCellRadioTypeName(networkType);

        setNetworkOperator(networkOperator);

        mMnc = cdl.getSystemId();

        mLac = cdl.getNetworkId();
        mCid = cdl.getBaseStationId();

        if (cdmaRssi != null) {
            mSignal = cdmaRssi;
        }
    } else {
        throw new IllegalArgumentException("Unexpected CellLocation type: " + cl.getClass().getName());
    }
}

From source file:com.samknows.measurement.environment.CellTowersData.java

@Override
public List<JSONObject> convertToJSON() {
    List<JSONObject> ret = new ArrayList<JSONObject>();

    try {//w w  w. j  ava 2s  .c o  m
        JSONObject cellLoc = null;
        if (cellLocation instanceof GsmCellLocation) {
            GsmCellLocation l = (GsmCellLocation) cellLocation;
            JSONObject gsm = new JSONObject();
            gsm.put(JSON_TYPE, JSON_TYPE_GSM_CELL_LOCATION);
            gsm.put(JSON_TIMESTAMP, time / 1000 + "");
            gsm.put(JSON_DATETIME, new java.util.Date(time).toString());
            gsm.put(JSON_CELL_TOWER_ID, l.getCid() + "");
            gsm.put(JSON_LOCATION_AREA_CODE, l.getLac());
            gsm.put(JSON_UMTS_PSC, Build.VERSION.SDK_INT >= 9 ? l.getPsc() + "" : "-1");
            if (signal.isGsm()) {
                gsm.put(JSON_SIGNAL_STRENGTH, signal.getGsmSignalStrength() + "");
                //gsm.put(JSON_BIT_ERROR_RATE, signal.getGsmBitErrorRate()+"");
            }
            ret.add(gsm);

        } else if (cellLocation instanceof CdmaCellLocation) {
            CdmaCellLocation l = (CdmaCellLocation) cellLocation;
            JSONObject cdma = new JSONObject();
            cdma.put(JSON_TYPE, JSON_TYPE_CDMA_CELL_LOCATION);
            cdma.put(JSON_TIMESTAMP, time / 1000 + "");
            cdma.put(JSON_DATETIME, new java.util.Date(time).toString());
            cdma.put(JSON_BASE_STATION_ID, l.getBaseStationId() + "");
            cdma.put(JSON_BASE_STATION_LATITUDE, l.getBaseStationLatitude() + "");
            cdma.put(JSON_BASE_STATION_LONGITUDE, l.getBaseStationLongitude() + "");
            cdma.put(JSON_SYSTEM_ID, l.getSystemId() + "");
            cdma.put(JSON_NETWORK_ID, l.getNetworkId() + "");
            if (!signal.isGsm()) {
                cdma.put(JSON_DBM, signal.getCdmaDbm() + "");
                cdma.put(JSON_ECIO, signal.getCdmaEcio() + "");
            }
            ret.add(cdma);
        }

        for (NeighboringCellInfo cellInfo : neighbors) {
            JSONObject neighbour = new JSONObject();
            neighbour.put(JSON_TYPE, JSON_TYPE_CELL_TOWER_NEIGHBOUR);
            neighbour.put(JSON_TIMESTAMP, time / 1000 + "");
            neighbour.put(JSON_DATETIME, new java.util.Date(time).toString());
            neighbour.put(JSON_NETWORK_TYPE_CODE, cellInfo.getNetworkType() + "");
            neighbour.put(JSON_NETWORK_TYPE, DCSConvertorUtil.convertNetworkType(cellInfo.getNetworkType()));
            neighbour.put(JSON_RSSI, cellInfo.getRssi() + "");
            neighbour.put(JSON_UMTS_PSC, cellInfo.getPsc() + "");
            neighbour.put(JSON_CELL_TOWER_ID, cellInfo.getCid() + "");
            neighbour.put(JSON_LOCATION_AREA_CODE, cellInfo.getLac() + "");
            ret.add(neighbour);
        }

    } catch (JSONException je) {
        Logger.e(CellTowersData.class, "Error in creating JSONObject: " + je.getMessage());
        ret = null;
    }
    return ret;
}

From source file:org.restcomm.app.qoslib.UtilsOld.CellHistory.java

public long getLastCellSeen(CellLocation cellLoc) // MMCCellLocationOld cellInfo)
{
    if (cellLoc == null)
        return -1;
    if (tmLastCellUpdate + 60000 > System.currentTimeMillis() && cellLoc.toString().equals(lastCellString))
        return -1;
    long timelastSeen = 0;
    tmLastCellUpdate = System.currentTimeMillis();

    // Is it reporting an unknown cell id? ignore those
    //        int cellId = 0;//cellInfo.getBSLow(); //low
    //        if (telephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM && cellLoc instanceof GsmCellLocation)
    //         cellId = ((GsmCellLocation)cellLoc).getCid();
    //      else if (telephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA && cellLoc instanceof CdmaCellLocation)
    //         cellId = ((CdmaCellLocation)cellLoc).getBaseStationId();
    //      if (cellId <= 0)
    //         return -1;

    CellidSample smp = new CellidSample(cellLoc);
    cell_history.add(smp);/*from  w  ww  . j a  v  a2  s .  c o m*/

    // How long has it been since we last saw this basestation
    //int bs_high = cellInfo.getBSHigh(), bs_mid = cellInfo.getBSMid(), bs_low = cellInfo.getBSLow();
    int bs_high = 0, bs_mid = 0, bs_low = 0;
    if (telephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM
            && cellLoc instanceof GsmCellLocation) {
        GsmCellLocation gsmCellLocation = (GsmCellLocation) cellLoc;
        bs_high = gsmCellLocation.getLac();
        bs_mid = gsmCellLocation.getCid() >> 16;
        bs_low = gsmCellLocation.getCid() & 0xffff;
    } else if (telephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA
            && cellLoc instanceof CdmaCellLocation) {
        CdmaCellLocation cdmaCellLocation = (CdmaCellLocation) cellLoc;
        bs_high = cdmaCellLocation.getSystemId();
        bs_mid = cdmaCellLocation.getNetworkId();
        bs_low = cdmaCellLocation.getBaseStationId();
    }
    if (bs_low <= 0)
        return -1;
    int j;
    int histlen = cell_history.size();
    // How long has it been since we last saw this basestation
    long timestamp = System.currentTimeMillis();
    for (j = histlen - 2; j >= 0; j--) {
        if (cell_history.get(j).val2 == bs_low) //  && cell_history.get(j).val1 == bs_high)
        {
            // time last seen is the first timestamp after the cell was last seen
            // (the time this cell handed off to another cell)
            // (if the last known cell was this same cell, then the time last seen is now)
            timelastSeen = timestamp;
            break;
        } else
            timestamp = cell_history.get(j).timestamp;

    }

    return timelastSeen;
}

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   www .j  a  v a 2  s  .  co  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:com.secupwn.aimsicd.service.CellTracker.java

/**
 * Add entries to the {@link com.secupwn.aimsicd.data.model.Measure Measure} realm
 *///from   w  w  w .  j a  v  a 2s  .c  o  m
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:org.restcomm.app.qoslib.Services.LibPhoneStateListener.java

private void checkInnerGsmCellLocation(CellLocation cell) {
    if (cell != null) {
        String strCells = "";

        Field getFieldPointer = null;
        try {/*from   w  ww .jav  a2s .  c  om*/
            getFieldPointer = cell.getClass().getDeclaredField("mGsmCellLoc"); //NoSuchFieldException 

        } catch (Exception e) {
            //MMCLogger.logToFile(MMCLogger.Level.ERROR, TAG, "checkInnerGsmCellLocation","Field does not exist - mGsmCellLoc");
        }
        if (getFieldPointer != null) {
            //now we're in business!
            try {
                getFieldPointer.setAccessible(true);
                GsmCellLocation gsmCell = (GsmCellLocation) getFieldPointer.get(cell);
                if (gsmCell != null) {
                    int bsHigh = gsmCell.getLac();
                    int bsLow = gsmCell.getCid();
                    LoggerUtil.logToFile(LoggerUtil.Level.ERROR, TAG, "checkInnerGsmCellLocation",
                            "Obtained mGsmCellLoc LAC=" + gsmCell.getLac() + " toString=" + gsmCell.toString());

                    if (mPhoneState.getNetworkType() == mPhoneState.NETWORK_NEWTYPE_LTE) {
                        int psc = 0;
                        if (android.os.Build.VERSION.SDK_INT >= 10)
                            psc = gsmCell.getPsc();
                        String neighbors = owner.getCellHistory().updateLteNeighborHistory(bsHigh, bsLow, psc);
                        owner.getIntentDispatcher().updateLTEIdentity(neighbors);
                        owner.getReportManager().setNeighbors(neighbors);
                    }
                }
            } catch (Exception e) {
                Log.d(TAG, "Could not get the inner GSM", e);
            }
        }
    }
}