Attualmente e' possibile effettuare la geolocalizzazione di un telefono Android mediante la rete cellulare,una possibilita', un tempo riservata a forze dell'ordine ed ai gestori della telefonia mobile.
Mediante le Api di Android e' possibile ottenere le informazioni sulla antenna agganciata dal telefono.
I parametri sono
MCC e MNC : relativi al gestore (in questo caso MCC 222 e MNC 88 indica Wind Italia)
CID e LAC : sono gli identificativi dell'antenna
Il codice per ottenere queste informazioni si possono ottenere con il codice riportato al termine del post
A questo punto ci si puo' affidare a servizi come quello fornito da
Cellphonetrackers.org, per ottenere una geolocalizzazione
Il segreto e' che esiste un database pubblico della posizione e degli ID delle antenne di telefonia mobile denominato
OpenCellID che permette di convertire le informazioni di telefonia in informazioni geografiche
Con la scheda Wind non sono riuscito a identificare le NeighboringCellInfo ne' il numero del cellulare (che e' gestito a livello di rete e non e' contenuto fisicamente nella SIM)
Con Vodafone invece la lista delle antenna vicine si popola con tre elementi di cui viene indicato l'RSSI ma non il LAC ed il CID (quindi fondamentalmente e' inutile)
Modifica il file Manifest
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
------------------------------------------------
TelephonyManager mTelephonyMgr;
mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String networkOperator = mTelephonyMgr.getNetworkOperator();
GsmCellLocation cellLocation = (GsmCellLocation) mTelephonyMgr.getCellLocation();
nr_phone = mTelephonyMgr.getLine1Number();
cid = cellLocation.getCid();
lac = cellLocation.getLac();
if (networkOperator != null) {
mcc = Integer.parseInt(networkOperator.substring(0, 3));
mnc = Integer.parseInt(networkOperator.substring(3));
}
------------------------------------------------
questo invece e' il codice per le celle vicine che non mi funziona
------------------------------------------------
List<NeighboringCellInfo> NeighboringList = mTelephonyMgr.getNeighboringCellInfo();
String stringNeighboring = "Neighboring List- Lac : Cid : RSSI\n";
for(int i=0; i < NeighboringList.size(); i++){
String dBm;
int rssi = NeighboringList.get(i).getRssi();
if(rssi == NeighboringCellInfo.UNKNOWN_RSSI){
dBm = "Unknown RSSI";
}else{
dBm = String.valueOf(-113 + 2 * rssi) + " dBm";
}
stringNeighboring = stringNeighboring
+ String.valueOf(NeighboringList.get(i).getLac()) +" : "
+ String.valueOf(NeighboringList.get(i).getCid()) +" : "
+ dBm +"\n";
}
------------------------------------------------