Java Code Examples for android.telephony.NeighboringCellInfo#getPsc()

The following examples show how to use android.telephony.NeighboringCellInfo#getPsc() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: CellLocationConverter.java    From TowerCollector with Mozilla Public License 2.0 6 votes vote down vote up
public Cell convert(NeighboringCellInfo neighboringCell, int mcc, int mnc, int mainCellLac, long mainCellCid) {
    Cell cell = new Cell();
    cell.setNeighboring(true);
    // no type checking because only GSM and UMTS cells can have neighboring cells
    NetworkGroup networkType = NetworkTypeUtils.getNetworkGroup(neighboringCell.getNetworkType());
    if (networkType == NetworkGroup.Gsm) {
        cell.setGsmCellLocation(mcc, mnc, neighboringCell.getLac(), neighboringCell.getCid(), NetworkGroup.Gsm);
    } else {
        int psc = neighboringCell.getPsc();
        if (psc == NeighboringCellInfo.UNKNOWN_CID) {
            psc = Cell.UNKNOWN_CID;
        }
        cell.setGsmCellLocation(mcc, mnc, mainCellLac, mainCellCid, psc, NetworkGroup.Wcdma);
    }
    return cell;
}
 
Example 2
Source File: CellBackendHelper.java    From android_external_UnifiedNlpApi with Apache License 2.0 5 votes vote down vote up
private Cell parseCellInfo(NeighboringCellInfo info) {
    try {
        if (getCellType(info.getNetworkType()) != Cell.CellType.GSM) return null;
        return new Cell(Cell.CellType.GSM, getMcc(), getMnc(), info.getLac(), info.getCid(),
                info.getPsc(), info.getRssi());
    } catch (Exception ignored) {
    }
    return null;
}
 
Example 3
Source File: CellBackendHelper.java    From android_external_UnifiedNlpApi with Apache License 2.0 5 votes vote down vote up
private Cell parseCellInfo(NeighboringCellInfo info) {
    try {
        if (getCellType(info.getNetworkType()) != Cell.CellType.GSM) return null;
        return new Cell(Cell.CellType.GSM, getMcc(), getMnc(), info.getLac(), info.getCid(),
                info.getPsc(), info.getRssi());
    } catch (Exception ignored) {
    }
    return null;
}
 
Example 4
Source File: CellTracker.java    From AIMSICDL with GNU General Public License v3.0 4 votes vote down vote up
/**
 *  Description:    Updates Neighbouring Cell details
 *
 *                  TODO: add more details...
 *
 *
 */
public List<Cell> updateNeighbouringCells() {
    List<Cell> neighboringCells = new ArrayList<>();
    List<NeighboringCellInfo> neighboringCellInfo = tm.getNeighboringCellInfo();

    if (neighboringCellInfo == null) {
        neighboringCellInfo = new ArrayList<>();
    }

    Boolean nclp = tinydb.getBoolean("nc_list_present"); // Is NC list present? (default is false)

    //if nclp = true then check for neighboringCellInfo
    //if (neighboringCellInfo != null && neighboringCellInfo.size() == 0 && nclp) {
    //if (!neighboringCellInfo.isEmpty() && neighboringCellInfo.size() == 0 && nclp) {
    if (neighboringCellInfo.size() == 0 && nclp) {

        Log.i(TAG, mTAG + "NeighbouringCellInfo is empty: start polling...");

        // Try to poll the neighboring cells for a few seconds
        neighboringCellBlockingQueue = new LinkedBlockingQueue<>(100); // Max 100 NC's before blocking (?)

        // ToDo: rename... (We don't use API's <18 anymore.)
        DeviceApi18.startListening(tm, phoneStatelistener);

        // ToDo: Move or remove. This should now be done by getAllCellInfo() in new RadioAPI "collector" module.
        for (int i = 0; i < 10 && neighboringCellInfo.size() == 0; i++) {
            try {
                Log.d(TAG, mTAG + "NeighbouringCellInfo empty: trying " + i);
                NeighboringCellInfo info = neighboringCellBlockingQueue.poll(1, TimeUnit.SECONDS);
                if (info == null) {
                    neighboringCellInfo = tm.getNeighboringCellInfo();
                    if (neighboringCellInfo != null) {
                        if (neighboringCellInfo.size() > 0) {
                            // Can we think of a better log message here?
                            Log.d(TAG, mTAG + "NeighbouringCellInfo found on " + i + " try. (time based)");
                            break;
                        } else {
                            continue;
                        }
                    }
                }
                List<NeighboringCellInfo> cellInfoList =
                        new ArrayList<>(neighboringCellBlockingQueue.size() + 1);
                while (info != null) {
                    cellInfoList.add(info);
                    info = neighboringCellBlockingQueue.poll(1, TimeUnit.SECONDS);
                }
                neighboringCellInfo = cellInfoList;
            } catch (InterruptedException e) {
                Log.e(TAG, mTAG + "Interrupted BlockingQueue Exception: " + e);
            }
        }
    }

    //log.debug(mTAG + ": neighbouringCellInfo size: " + neighboringCellInfo.size());

    // Add NC list to DBi_measure:nc_list
    for (NeighboringCellInfo neighbourCell : neighboringCellInfo) {
        Log.i(TAG, mTAG + "NeighbouringCellInfo -" +
                " LAC:" + neighbourCell.getLac() +
                " CID:" + neighbourCell.getCid() +
                " PSC:" + neighbourCell.getPsc() +
                " RSSI:" + neighbourCell.getRssi());

        final Cell cell = new Cell(
                neighbourCell.getCid(),
                neighbourCell.getLac(),
                neighbourCell.getRssi(),
                neighbourCell.getPsc(),
                neighbourCell.getNetworkType(), false);
        neighboringCells.add(cell);
    }
    return neighboringCells;
}
 
Example 5
Source File: CellTowerListLte.java    From satstat with GNU General Public License v3.0 4 votes vote down vote up
/**
 * 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. Cells whose network type is not LTE will be
 * rejected.
 * <p>
 * This method will set the cell's identity data, generation and its signal
 * strength.
 * @return The new or updated entry, or {@code null} if the cell was rejected
 */
public CellTowerLte update(String networkOperator, NeighboringCellInfo cell) {
	int mcc = CellTower.UNKNOWN;
	int mnc = CellTower.UNKNOWN;
	if (networkOperator.length() > 3) {
		mcc = Integer.parseInt(networkOperator.substring(0, 3));
		mnc = Integer.parseInt(networkOperator.substring(3));
	}
	CellTowerLte result = null;
	CellTowerLte cand = this.get(mcc, mnc, cell.getLac(), cell.getCid());
	if ((cand != null) && CellTower.matches(cell.getPsc(), cand.getPci()))
		result = cand;

	if (result == null) {
		cand = this.get(cell.getPsc());
		if ((cand != null)
				&& CellTower.matches(mcc, cand.getMcc())
				&& CellTower.matches(mnc, cand.getMnc())
				&& CellTower.matches(cell.getLac(), cand.getTac())
				&& CellTower.matches(cell.getCid(), cand.getCi()))
			result = cand;
	}
	if (result == null)
		result = new CellTowerLte(mcc, mnc, cell.getLac(), cell.getCid(), cell.getPsc());
	result.setNeighboringCellInfo(true);
	int networkType = cell.getNetworkType();
	switch (networkType) {
	case TelephonyManager.NETWORK_TYPE_LTE:
			result.setAsu(cell.getRssi());
			break;
		default:
			// not an LTE cell, return
			return null;
	}
	result.setNetworkType(networkType);
	if (result.getMcc() == CellTower.UNKNOWN)
		result.setMcc(mcc);
	if (result.getMnc() == CellTower.UNKNOWN)
		result.setMnc(mnc);
	if (result.getTac() == CellTower.UNKNOWN)
		result.setTac(cell.getLac());
	if (result.getCi() == CellTower.UNKNOWN)
		result.setCi(cell.getCid());
	if (result.getPci() == CellTower.UNKNOWN)
		result.setPci(cell.getPsc());
	this.put(result.getText(), result);
	this.put(result.getAltText(), result);
	Log.d(this.getClass().getSimpleName(), String.format("Added NeighboringCellInfo for %s, %d G, %d dBm",
			result.getText(),
			result.getGeneration(),
			result.getDbm()));
	return result;
}
 
Example 6
Source File: CellTowerListGsm.java    From satstat with GNU General Public License v3.0 4 votes vote down vote up
/**
 * 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. Cells whose network type is not a flavor of GSM or
 * UMTS will be rejected.
 * <p>
 * This method will set the cell's identity data, generation and its signal
 * strength. 
 * @return The new or updated entry, or {@code null} if the cell was rejected
 */
public CellTowerGsm update(String networkOperator, NeighboringCellInfo cell) {
	int mcc = CellTower.UNKNOWN;
	int mnc = CellTower.UNKNOWN;
	if (networkOperator.length() > 3) {
		mcc = Integer.parseInt(networkOperator.substring(0, 3));
		mnc = Integer.parseInt(networkOperator.substring(3));
	}
	CellTowerGsm result = null;
	CellTowerGsm cand = this.get(mcc, mnc, cell.getLac(), cell.getCid());
	if ((cand != null) && CellTower.matches(cell.getPsc(), cand.getPsc()))
		result = cand;

	if (result == null) {
		cand = this.get(cell.getPsc());
		if ((cand != null)
				&& CellTower.matches(mcc, cand.getMcc())
				&& CellTower.matches(mnc, cand.getMnc())
				&& CellTower.matches(cell.getLac(), cand.getLac())
				&& CellTower.matches(cell.getCid(), cand.getCid()))
			result = cand;
	}
	if (result == null)
		result = new CellTowerGsm(mcc, mnc, cell.getLac(), cell.getCid(), cell.getPsc());
	result.setNeighboringCellInfo(true);
	int networkType = cell.getNetworkType();
	switch (networkType) {
		case TelephonyManager.NETWORK_TYPE_UMTS:
		case TelephonyManager.NETWORK_TYPE_HSDPA:
		case TelephonyManager.NETWORK_TYPE_HSUPA:
		case TelephonyManager.NETWORK_TYPE_HSPA:
			/*
			 * for details see TS 25.133 section 9.1.1.3
			 * http://www.3gpp.org/DynaReport/25133.htm
			 */
			result.setCpichRscp(cell.getRssi());
			break;
		case TelephonyManager.NETWORK_TYPE_EDGE:
		case TelephonyManager.NETWORK_TYPE_GPRS:
			result.setAsu(cell.getRssi());
			break;
		default:
			// not a GSM or UMTS cell, return
			return null;
			// result.setDbm(CellTower.DBM_UNKNOWN);
			// not needed because this is the default value; setting it
			// here might overwrite valid data obtained from a different
			// source
	}
	result.setNetworkType(networkType);
	if (result.getMcc() == CellTower.UNKNOWN)
		result.setMcc(mcc);
	if (result.getMnc() == CellTower.UNKNOWN)
		result.setMnc(mnc);
	if (result.getLac() == CellTower.UNKNOWN)
		result.setLac(cell.getLac());
	if (result.getCid() == CellTower.UNKNOWN)
		result.setCid(cell.getCid());
	if (result.getPsc() == CellTower.UNKNOWN)
		result.setPsc(cell.getPsc());
	this.put(result.getText(), result);
	this.put(result.getAltText(), result);
	if ((result.getText() == null) && (result.getAltText() == null))
		Log.d(this.getClass().getSimpleName(), String.format("Added %d G cell with no data from NeighboringCellInfo", result.getGeneration()));
	return result;
}