android - telecomunicaciones - obtener cell id
Android: ¿CellID no está disponible en todos los operadores? (5)
Creo que esto se debe a la forma en que los fabricantes han implementado el código kernel subyacente en el dispositivo, no permitiéndole acceder a cierta información.
Cuando solicito información sobre Cell ID y LAC, en algunos dispositivos no puedo recuperarlos.
Yo uso este código:
TelephonyManager tm =(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
location = (GsmCellLocation) tm.getCellLocation();
cellID = location.getCid();
lac = location.getLac();
- ¿Alguien sabe por qué algunos operadores GSM no los proporcionan?
- ¿Necesito permisos para eso?
- ¿Qué más hay que saber sobre la recuperación de CellID y LAC?
Entonces puedes probar algo como. Tengo la identificación de la celda y el código de área de ubicación para GSM. Pero para UMTS, getCid () devuelve un gran número para el archivo 33 166 248. Así que agrego el operador de módulo (exple xXx.getCid ()% 0xffff).
GsmCellLocation cellLocation = (GsmCellLocation)telm.getCellLocation();
new_cid = cellLocation.getCid() % 0xffff;
new_lac = cellLocation.getLac() % 0xffff;
Intente utilizar un PhoneStateListener de la siguiente manera:
Primero, crea el oyente.
public PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCellLocationChanged (CellLocation location) {
StringBuffer str = new StringBuffer();
// GSM
if (location instanceof GsmCellLocation) {
GsmCellLocation loc = (GsmCellLocation) location;
str.append("gsm ");
str.append(loc.getCid());
str.append(" ");
str.append(loc.getLac());
Log.d(TAG, str.toString());
}
}
};
Y luego registrar, en onCreate (), el oyente de la siguiente manera:
telephonyManager = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CELL_LOCATION);
Como se indica en la documentación , LISTEN_CELL_LOCATION requiere que agregue el siguiente permiso:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Para encontrar CellId, debe usar 0xffff como máscara de bits, NO mod.
INCORRECTO
new_cid = cellLocation.getCid() % 0xffff;
DERECHO
new_cid = cellLocation.getCid() & 0xffff;
Necesita usar TelephonyManager
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager
.getCellLocation();
// Cell Id, LAC
int cellid = cellLocation.getCid();
int lac = cellLocation.getLac();
// MCC
String MCC = telephonyManager.getNetworkOperator();
int mcc = Integer.parseInt(MCC.substring(0, 3));
// Operator name
String operatoprName = telephonyManager.getNetworkOperatorName();
Para obtener permiso, debe agregar followin en el archivo Manifest.xml
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />