Intereting Posts
Как заставить Android Studio прекратить возвращать сгенерированный код в результатах поиска? Активность просочилась в окно / диалог (это снова!) Android – программно создает представление progressBar Как перехватить нагрузки URL в WebView (android)? Как очистить фокус от всех выбираемых элементов в представлении? Code Path for Flavor в Android Gradle Значок панели действий, скрытый после того, как SearchView расширяется Подписание apk как системы с использованием ключей, найденных в source / build / target / product / security / Как нажимать на индекс в меню параметров с помощью Espresso Android Android Studio 2.3 Обновление не открытие приложения Android: элементы в списках не становятся оранжевыми при нажатии? Android Login – Лучшая реализация Добавление настраиваемого свойства в маркер (Google Maps Android API V2) Автоматическое обновление приложения для Android никогда не происходит Почему мое меню редактирования / вставки EditText находится под EditText? Как изменить всплывающее окно z-порядка?

Извлечь информацию о ячейках

Кто-нибудь знает, как получить список сотовых башен в GSM и CDMA на Android.

Я пытаюсь использовать API местоположений Google Maps: https://developers.google.com/maps/documentation/business/geolocation/

И я хочу получить информацию о ячейках со следующими полями:

  • CellId: уникальный идентификатор ячейки. В GSM это идентификатор ячейки (CID); В сетях CDMA используется идентификатор базовой станции (BID).
  • LocationAreaCode: код зоны местоположения (LAC) для сетей GSM; В сетях CDMA используется сетевой идентификатор (NID).
  • MobileCountryCode: Мобильный код страны мобильной станции (MCC).
  • MobileNetworkCode: Мобильный сетевой код ячейки. Это MNC для GSM или системный идентификатор (SID) для CDMA.
  • Age: количество миллисекунд, поскольку эта ячейка была первичной. Если возраст равен 0, cellId представляет собой текущее измерение.
  • SignalStrength: Уровень радиосигнала измерен в дБм.
  • TimingAdvance: значение продвижения по времени.

Этот код не особенно касается информации о сотовых башнях.

TelephonyManager tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); // Type of the network int phoneTypeInt = tel.getPhoneType(); String phoneType = null; phoneType = phoneTypeInt == TelephonyManager.PHONE_TYPE_GSM ? "gsm" : phoneType; phoneType = phoneTypeInt == TelephonyManager.PHONE_TYPE_CDMA ? "cdma" : phoneType; try { if (phoneType != null) { params.put("radioType", phoneType); } } catch (Exception e) {} /* * The below code doesn't work I think. */ JSONArray cellList = new JSONArray(); List<NeighboringCellInfo> neighCells = tel.getNeighboringCellInfo(); for (int i = 0; i < neighCells.size(); i++) { try { JSONObject cellObj = new JSONObject(); NeighboringCellInfo thisCell = neighCells.get(i); cellObj.put("cellId", thisCell.getCid()); cellList.put(cellObj); } catch (Exception e) {} } if (cellList.length() > 0) { try { params.put("cellTowers", cellList); } catch (JSONException e) {} } 

И я устанавливаю разрешения следующим образом:

 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> 

Пожалуйста, помогите мне, спасибо.

Solutions Collecting From Web of "Извлечь информацию о ячейках"

Ваш телефон может не поддерживать эту функцию.

См. Это: http://code.google.com/p/android/issues/detail?id=24136

И это: Какие модели телефонов Android поддерживают getNeighboringCellInfo ()?

У меня была эта проблема совсем недавно, и это оказалось тем фактом, что

getNeighboringCellInfo

Устарел от API 23 вверх. Чтобы обойти это, используйте что-то вроде следующего (это очень раздражает, действительно):

 public static JSONArray getCellInfo(Context ctx){ TelephonyManager tel = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE); JSONArray cellList = new JSONArray(); // Type of the network int phoneTypeInt = tel.getPhoneType(); String phoneType = null; phoneType = phoneTypeInt == TelephonyManager.PHONE_TYPE_GSM ? "gsm" : phoneType; phoneType = phoneTypeInt == TelephonyManager.PHONE_TYPE_CDMA ? "cdma" : phoneType; //from Android M up must use getAllCellInfo if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { List<NeighboringCellInfo> neighCells = tel.getNeighboringCellInfo(); for (int i = 0; i < neighCells.size(); i++) { try { JSONObject cellObj = new JSONObject(); NeighboringCellInfo thisCell = neighCells.get(i); cellObj.put("cellId", thisCell.getCid()); cellObj.put("lac", thisCell.getLac()); cellObj.put("rssi", thisCell.getRssi()); cellList.put(cellObj); } catch (Exception e) { } } } else { List<CellInfo> infos = tel.getAllCellInfo(); for (int i = 0; i<infos.size(); ++i) { try { JSONObject cellObj = new JSONObject(); CellInfo info = infos.get(i); if (info instanceof CellInfoGsm){ CellSignalStrengthGsm gsm = ((CellInfoGsm) info).getCellSignalStrength(); CellIdentityGsm identityGsm = ((CellInfoGsm) info).getCellIdentity(); cellObj.put("cellId", identityGsm.getCid()); cellObj.put("lac", identityGsm.getLac()); cellObj.put("dbm", gsm.getDbm()); cellList.put(cellObj); } else if (info instanceof CellInfoLte) { CellSignalStrengthLte lte = ((CellInfoLte) info).getCellSignalStrength(); CellIdentityLte identityLte = ((CellInfoLte) info).getCellIdentity(); cellObj.put("cellId", identityLte.getCi()); cellObj.put("tac", identityLte.getTac()); cellObj.put("dbm", lte.getDbm()); cellList.put(cellObj); } } catch (Exception ex) { } } } return cellList; } 

Это не ваш телефон, который не поддерживает эту информацию, это чисто дрянная реализация связанных с RIL C и Java, используемых для предоставления этих вызовов API, что мешает этому. Если вам удастся войти в меню Service Mode (которые широко варьируются от телефона к телефону), у вас будет полный и мгновенный доступ к RSSI и нагрузкам других типов сигналов. Вы должны обвинять Google (или вашего OEM-производителя) в том, что вы не устраняете эти проблемы и не предоставляете лучший доступ к связанным с РФ переменным.