Obecnie trilateruję mojego Androida z komórkami w mojej sieci. Jest nawet dokładniejsza, niż myślałem. Ale nie tak dokładne, jak tego chcę. Więc chcę zaangażować więcej wież, niż dostaję od getNeighboringCellInfo. Chcę uzyskać identyfikator komórki i siłę sygnału każdej wieży w zasięgu. Z każdego operatora sieciowego. Czy istnieje sposób na "pingowanie" wież, więc odpowiadają one za pomocą cellID, Lac i signalstrength? Jakoś to musi być możliwe. Czy mogę skanować równolegle 2G i 3G (i 4G)? Czy mogę programowo przełączać się między nimi? Jakieś sugestie? Mam nadzieję, że jestem wystarczająco jasny ...Uzyskiwanie CID, LAC i siły sygnału wszystkich wież komórkowych w zakresie
5
A
Odpowiedz
1
Wydaje się, że TelephonyManager
i getNeighboringCellInfo()
są tym, czego szukasz.
Oto przykład, który jest łatwe i proste:
/* first you wanna get a telephony manager by asking the system service */
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
/* then you can query for all the neighborhood cells */
List<NeighboringCellInfo> neighbors = tm.getNeighboringCellInfo();
/* here's something you can get from NeighboringCellInfo */
for (NeighboringCellInfo n : neighbors) {
Log.v("CellInfo", "" + n.getCid());
Log.v("CellInfo", "" + n.getLac());
Log.v("CellInfo", "" + n.getPsc());
Log.v("CellInfo", "" + n.getRssi());
}
Upewnij się, że zawierają wszystkie uprawnienia wymagane, takich jak ACCESS_COARSE_LOCATION
lub READ_PHONE_STATE
, w zależności od tego, co API będziesz używania w swoim manifeście plik, lub po prostu się zawiesi.
Oh btw to działa tylko dla 2G. 3G lub nowszy nie obsługuje tego rodzaju operacji.
"Dlatego chcę zaangażować więcej wież, niż otrzymuję od getNeighboringCellInfo." Już czytam CID z sąsiednich komórek. Ale chcę uzyskać WSZYSTKIE CIDy KAŻDEGO operatora sieci w zasięgu. – albrechtATnetzfactor
tm.getAllCellInfo() jest lepszym wyborem. – ofskyMohsen