Getallcellinfo() — Проблемы с TelephonyManager на Android.


Метод getAllCellInfo () не определен для типа TelephonyManager [Android]

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

Зная, что метод getAllCellInfo() и класс CellInfo был введен на уровне API 17, я установил andro в файле AndroidManifest.xml.

Однако в Затмении я получаю ошибки, указывающие: импорт android.telephony. CellInfo не может быть решен и метод getAllCellInfo() не определен для типа TelephonyManager

Я попытался убрать, закрыв Затмение и восстановив мой проект, но я все еще получаю эти ошибки. Я в замешательстве относительно того, почему Затмение не признает эти декларации

GetAllCellInfo () возвращает пустой список на Nexus 5x

Я читаю все сообщения о getAllCellInfo () и имеет аналогичную ситуацию, например это . Код, который вы найдете ниже, хорошо работает на Android 6 (OnePlus One), но возвращает пустой список Cellinfo в Google Nexus 5x Android 8.1 API 27. Я установил разрешение разрешающего доступа к коре в манифесте и попросил разрешения при первом запуске приложения.

Вот фрагмент кода:

При попытке других приложений, таких как «Network Cell Info lite», эти приложения получают всю информацию о ячейке: (

Получить уровень сигнала GSM/LTE

Вопрос

Pavel M 6

Pavel M 6

  • Продвинутый пользователь
  • Пользователи
  • 6
  • 32 сообщения

Как получить уровень приема сотовой сети?


Google пользоваться умею, а вот отсутствие опыта дает о себе знать.

Буду благодарен за ссылки, что почитать для общего понятия написания по android c учетом специфики Delphi.

This constant was deprecated in API level 7.
by LISTEN_SIGNAL_STRENGTHS

Listen for changes to the network signal strength (cellular).

Constant Value: 2 (0x00000002)

Вот что пытаюсь сделать:

Пытаюсь и вот так

В на выходе конечно же получаю ошибку.

Как я понимаю тут надо создать какой то ресивер?

Он используется постоянно и вызываетя при событии описываемой в Delphi процедурой?

Или к нему разовый доступ и получение текущей информации при обращении к его свойствам?

Прошу больше помочь не готовым кодом, а что почитать. Поскольку есть желание понять.

Изменено 10 февраля, 2020 пользователем pvmmpv

Поделиться сообщением

Ссылка на сообщение
Поделиться на другие сайты

12 ответов на этот вопрос

Рекомендуемые сообщения

Присоединяйтесь к обсуждению


Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Похожий контент

Приветствую. Имеется необходимость получить список всех видимых (GUI) компонентов, установленных в Delphi. Я видел где-то, что можно как-то попробовать через ToolsAPI это сделать, но ничего толкового на эту тему так и не нашел. Может есть у кого мысли по этому поводу?
Если возникнет вопрос: для чего тебе это?
Ответ: Для приложения LivePreview, которое идет вместе со студией для того, чтобы видеть то, что размещаю на форме непосредственно на устройстве.

Задался идеей написания IPTV приложения «для себя», в котором при желании смог бы реализовать что-то необходимое и удалить то, что не нужно.
Собственно вопрос в другом: Я написал простое приложение, которое отлавливает коды кнопок с пульта, приложение по сути самое банальное, использует OnKeyDown и OnKeyUp (чисто для теста). И по нажатию на кнопку на пульте высылает например в Memo или ListBox Информацию о нажатой кнопке (включая ее код).
Но суть в том, что далеко не все кнопки таким образом распознаются. Для примера:
Кнопки громкости, назад, домой, увеличение\уменьшение громкости, стрелки(влево, вправо, вверх, вниз) и центральная кнопка (по совместительству OK).
Цифры все определяются, как одна — 0
Кнопки, которые не определяются (не срабатывает событие, ибо если был бы неизвестен код, то думаю, в таком случае получил бы все, кроме кода кнопки), но по нажатию кнопки, которая не определяется приложением — ничего не происходит вообще.

Цукерберг рекомендует:  Создаем первое PHP приложение Часть №1

Вопрос: Есть ли возможность как-то «научить» приложение распознавать эти кнопки? (Я где-то читал, может даже и здесь, что это все так реализовано именно на уровне самого FireMonkey, будто этих кнопок вообще не существует).
Если эта тема уже поднималась на форуме или вопрос очень просто решается — извиняюсь)
Решение: http://fire-monkey.ru/topic/5624-как-отловить-кнопки-пульта-ду/?do=findComment&comment=36399

Последние посетители 0 пользователей онлайн

Ни одного зарегистрированного пользователя не просматривает данную страницу

Метод getAllCellInfo () не определено для типа TelephonyManager [Android]

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

Зная , что метод getAllCellInfo () и класс CellInfo был введен в Уровень 17 API, я поставил андроида: minSdkVersion = «17» в файле AndroidManifest.xml.

Однако, в Eclipse , я получаю ошибки заявив: Импорт android.telephony.CellInfo не может быть решена и метод getAllCellInfo () не определено для типа TelephonyManager

Я попытался очистки, закрывая Eclipse, и восстановление моего проекта, но я все еще получаю эти ошибки. Я в недоумении, почему Eclipse, не признавая эти заявления

Спасибо за вашу помощь.

Edit: Разрешение android.permission.ACCESS_COARSE_LOCATION также включены в файл AndroidManifest.xml. Но проблема все еще остается.

Проверьте project.properties файл и посмотрите на цель , которую вы строите против. Это должно выглядеть примерно так:

target=Google Inc.:Google APIs:17

Это старый проект, который я имел на руках, который строит для API 17 (с Google API.)

Вы также можете зайти в свойства проекта и проверьте цели в пользовательском интерфейсе. Этот параметр соответствует этому файлу и то, что использует Eclipse, чтобы построить против, не манифест. Манифест используется во время выполнения на платформе, чтобы знать, какие режимы совместимости для того, чтобы в рамках.

getAllCellInfo() возвращает пустой список на Nexus 5x


1 damned [2020-01-04 12:58:00]

Я прочитал все сообщения о getAllCellInfo() и иметь такую же ситуацию, как это. Код, размещенный ниже, хорошо работает на Android 6 (OnePlus One), но возвращает пустой список Cellinfo в Google Nexus 5x Android 8.1 API 27. Я установил разрешение доступа ACCESS CORSE LOCATION в манифесте и попросил разрешения при первом запуске приложения,

Вот фрагмент кода:

При попытке использования других приложений, таких как «Network Cell Info lite», эти приложения получают всю информацию о cellinformation :(

Любая помощь очень ценится.

2 ответа

2 Anand [2020-02-12 14:45:00]

В Android 8.0 и выше для доступа к getAllCellInfo() ваше приложение должно быть на переднем плане.

Если вы хотите получить доступ к getAllCellInfo() вам необходимо включить службу определения местоположения.

Попробуйте это. Возможно, у вас есть проблема с разрешением из-за версии ОС, которая равна 23 или выше.

Getallcellinfo() — Проблемы с TelephonyManager на Android.

В этой статье рассмотрим как получить информацию о телефоне, sim-карте, сети сотовой связи, а также параметры дисплея и аккумулятора мобильного телефона.

Телефон и сотовая сеть

Для доступа к данным о телефоне, sim и сотовой сети используется класс TelephonyManager. С помощью этого класса можно определить тип и состояние телефона, доступность сотовой сети и состоянии sim-карты.

1. Экземпляр класса TelephonyManager нельзя создать напрямую, для этого необходимо вызвать метод getSystemService() (из класса Context) и передать ему константу Context.TELEPHONY_SERVICE.

  1. TelephonyManager tm = ( TelephonyManager ) getSystemService ( Context . TELEPHONY_SERVICE ) ;

2. Для некоторых методов класса TelephonyManager в файл манифеста (AndroidManifest.xml) необходимо добавить разрешение READ_PHONE_STATE (получение информации о состоянии телефона) или ACCESS_COARSE_LOCATION (информация о базовой станции сети сотовой связи). Разрешения в файл манифеста добавляются так:


  1. xmlns:android = «http://schemas.android.com/apk/res/andr oid»
  2. android:versionCode = «1»
  3. android:versionName = «1.0» >
  4. android:name = «android.permission.READ_PHONE_STATE» />
  5. android:name = «android.permission.ACCESS_COARSE_LOCATI ON» />
  6. >
  7. .
  8. >
  9. >

3. Посмотрим какую информацию мы можем получить:
— int getCallState() — определяет состояние вызова телефона. Возвращает одну из трех констант: CALL_STATE_IDLE (телефон не активен), CALL_STATE_OFFHOOK (попытка вызова), CALL_STATE_RINGING (соединение с абонентом).

— int getPhoneType () — определяет тип мобильного телефона. Возвращает одну из констант PHONE_TYPE_CDMA, PHONE_TYPE_GSM, PHONE_TYPE_NONE, PHONE_TYPE_SIP.

— int getNetworkType () — определяет тип сотовой сети. Возвращает одну из констант NETWORK_TYPE_UNKNOWN, NETWORK_TYPE_GPRS, NETWORK_TYPE_EDGE, NETWORK_TYPE_UMTS, NETWORK_TYPE_CDMA и др.

— String getNetworkCountryIso () — возвращает код страны в которой зарегистрирован оператор.

— String getNetworkOperator () — возвращает код оператор (MCC+MNC) (mobile country code + mobile network code)

— String getNetworkOperatorName () — возвращает имя оператора

— String getDeviceId () — возвращает ID мобильного устройства

— String getDeviceSoftwareVersion () — возвращает версию программного обеспечения (это не версия android)

Цукерберг рекомендует:  Эволюция - Игра в эволюцию


— int getDataState () — определяет состояние передачи данных. Возвращает одну из констант DATA_DISCONNECTED, DATA_CONNECTING, DATA_CONNECTED, DATA_SUSPENDED.

— int getDataActivity () — определяет направление передачи данных. Возвращает одну из констант DATA_ACTIVITY_NONE, DATA_ACTIVITY_IN, DATA_ACTIVITY_OUT, DATA_ACTIVITY_INOUT, DATA_ACTIVITY_DORMANT.

— boolean isNetworkRoaming () — определяет находится ли телефон в роуминге.

— CellLocation getCellLocation () — определяет текущее положение устройства. Возвращает экземпляр класса CellLocation, а точнее один из его классов-потомков CdmaCellLocation (для сети CDMA) или GsmCellLocation (для сетей GSM). В классе GsmCellLocation можно определить ID базовой станции сотовой сети (int getCid ()) и код территории в которой находится телефон (int getLac ())). В классе CdmaCellLocation можно получить также ID базовой станции (int getBaseStationId()), а также ее географические координаты (int getBaseStationLatitude(), int getBaseStationLongitude()).

— int getSimState() — определяет состояние sim-карты. Возвращает одну из констант SIM_STATE_UNKNOWN, SIM_STATE_ABSENT, SIM_STATE_PIN_REQUIRED, SIM_STATE_PUK_REQUIRED, SIM_STATE_NETWORK_LOCKED, SIM_STATE_READY.

— String getSimCountryIso() — Возвращает код страны провайдера

— String getSimOperator() — Возвращает код оператора (MCC+MNC)

— String getSimOperatorName() — Возвращает имя провайдера

— String getSimSerialNumber() — Возвращает серийный номер sim-карты.

Дисплей

  1. DisplayMetrics metrics = new DisplayMetrics ( ) ;
  2. getWindowManager ( ) . getDefaultDisplay ( ) . getMetrics ( metrics ) ;

В первой строчке определяется экземпляр класса DisplayMetrics, а во второй этот экземпляр инициализируется.
getWindowManager () (из класса Activity) — возвращает оконный менеджер (экземпляр класса WindowManager)
getDefaultDisplay() (из класса WindowManager) — возвращает дисплей, на котором оконный менеджер создает окна (экземпляо класса Display)
getMetrics() (из класса Display) — метод принимающий out-параметр типа DisplayMetrics для получения параметров экрана.
То есть после этих двух строчек мы получаем metrics, который содержит информацию о дисплее.

В классе DisplayMetrics есть следующие открытые поля:
densityDpi — плотность пикселей на экране (dpi)
scaledDensity — фактор масштабирования для шрифтов
heightPixels — высота экрана
widthPixels — ширина экрана
xdpi — точное количество пикселей на дюйм по ширине экрана
ydpi — точное количество пикселей на дюйм по ширине экрана

Аккумулятор

Для получения информации об аккумулятор используется класс BatteryManager. В отличие от двух предыдущих случаев, службы управляющей батарей устройства не существует. Система android рассылает широковещательные сообщения (Broadcast) об изменении состояния аккумулятора. Нам надо подписаться на получение таких сообщений.
Подписаться на широковещательные сообщения можно с помощью метода
registerReceiver(BroadcastReceiver receiver, IntentFilter filter), где
receiver — экземпляр класса унаследовнного от BroadcastReceiver с переопределенным методом OnReceive()
filter — экземпляр класса IntentFilter, определяющий, на какие сообщения мы хотим подписаться.


  1. public void onCreate ( Bundle savedInstanceState ) <
  2. .
  3. BroadcastReceiver receiver = new BroadcastReceiver ( ) <
  4. @ Override
  5. public void onReceive ( Context context, Intent intent ) <
  6. int status = intent. getIntExtra ( BatteryManager. EXTRA_STATUS , — 1 ) ;
  7. >
  8. > ;
  9. registerReceiver ( receiver, new IntentFilter ( Intent. ACTION_BATTERY_CHANGED ) ) ;
  10. >

Мы подписались на сообщения ACTION_BATTERY_CHANGED, теперь при изменении состоянии батареи мобильного телефона, будет вызываться метод OnReceive. В этот метод передается переменная intent, которая содержит набор Extra-параметров, предоставляющих информацию об аккумуляторе.
Получить эти параметры можно с помощью методов
int getIntExtra(String name, int defaultValue) или String getStringExtra(String name)
где name — название параметра
defaultValue — значение по умолчанию, если параметр не определено.
Эти методы возвращают числовое или строковое значение параметра (в классе Intent есть также функции для float, double и т.д., но в данном случае они нам не понадобятся).

В качестве названия параметра (name) передается одна из констант из класса BatteryManager:

EXTRA_HEALTH — состояние батареи. Значением будет одна из следующих констант:
BATTERY_HEALTH_DEAD — батарея неработоспособна
BATTERY_HEALTH_GOOD — батарея в хорошем состоянии
BATTERY_HEALTH_OVERHEAT — батарея перегрета
BATTERY_HEALTH_OVER_VOLTAGE — у батареи повышенное напряжение
BATTERY_HEALTH_UNKNOWN — состояние неизвестно
BATTERY_HEALTH_UNSPECIFIED_FAILURE — батарея неисправна

EXTRA_ICON_SMALL — идентификатор ресурса для значка батареи. Такой значок показывается в строке состояния мобильного телефона и показывает уровень заряда батареи

EXTRA_SCALE — максимальный уровень заряда батареи

EXTRA_LEVEL — текущий уровень заряда батареи (значение от 0 до EXTRA_SCALE)

EXTRA_STATUS — определяет состояние заряда аккумулятора. Значением будет одна из следующих констант:
BATTERY_STATUS_CHARGING — батарея заряжается
BATTERY_STATUS_DISCHARGING — батарея разряжена
BATTERY_STATUS_FULL — батарея заряжена
BATTERY_STATUS_NOT_CHARGING — батарея не заряжается
BATTERY_STATUS_UNKNOWN — состояние не известно

EXTRA_PLUGGED — определяет подключение зарядного устройства. Значением будет одна из следующих констант:
BATTERY_PLUGGED_AC — подключено к зарядному устройству
BATTERY_PLUGGED_USB — подключено к USB

EXTRA_PRESENT — определяет наличие батареи в устройстве (значение типа boolean)

EXTRA_TECHNOLOGY — технология батареи, например “Li-Ion”. (значение типа String)

Цукерберг рекомендует:  Генераторы статических сайтов. Краткий обзор

EXTRA_TEMPERATURE — температура батареи

EXTRA_VOLTAGE — напряжение на батареи

Для получения информации о состоянии аккумулятора необходимо добавить разрешение BATTERY_STATS в AndroidManifest.xml

Полный код приводить тут не буду, он достаточно банален. При последовательном вызове всех описанных методов получаем что-то такое:

Метод getAllCellInfo() не определено для типа TelephonyManager [Android]

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

Зная, что метод getAllCellInfo() и класс CellInfo был введен в API Level 17, я установил andro в файле AndroidManifest.xml.

Однако в Eclipse, я получаю ошибки заявив: импорт android.telephony.CellInfo не может быть решена и метод getAllCellInfo() не определено для типа TelephonyManager

I» я попробовал очистить, закрыв Eclipse и восстановив свой проект, но я все еще получаю эти ошибки. Я не понимаю, почему Eclipse не признает эти объявления

Спасибо за помощь.

Edit: Разрешение android.permission.ACCESS_COARSE_LOCATION также включены в файл AndroidManifest.xml. Но вопрос все еще остается.

Создан 12 мар. 15 2015-03-12 19:50:51 kralvarado

Fixing getAllCellInfo method in TelephonyManager

Hi guys, first of all, thanks for you hard work.
I’d like to use you ROM, I’m on LG G2 and LG G3 (it’s available for both the devices luckily), but I use the CellMapper application a lot (https://play.google.com/store/apps/d. llmapper&hl=it), and it requires the getAllCellInfo method in TelephonyManager to work. On stock ROMs and until Cyanogenmod 13 this method was perfectly implemented and working, now looks like the number of argument is wrong, or something like that.

Could you please fix this? All CellMapper users who were forced to stay on CM13 or stock would be so glad!!

Получение IMEI Android-устройства средствами Qt

В свете выхода релиза Qt 5.2.0 с заявленной поддержкой андроида, готовой к продакшену, решил наконец-то попробовать, что же оно из себя представляет — разработка под андроид средствами Qt. И сразу же у меня возник вопрос получения IMEI устройства (необходимо для разрабатываемого приложения). Сходу сделать не получилось, пришлось потратить некоторое время (основная проблема в отсутствии знаний jni). Кому интересно — просим под кат.

Реализация поставленной задачи средствами Java достаточно тривиальна, и найти решение в интернете не представляет проблем. Таким образом, задача сводилась к реализации этого кода средствами Qt.

Qt 5.2 включает в себя классы для доступа к нативным функциям андроида. Это QAndroidJniEnvironment и QAndroidJniObject. Для их использования в .pro файле необходимо добавить

Сразу приведу весь метод получения IMEI, а потом вкратце опишу особенности.

В самом начале объявляем переменную env, которая обеспечит нам доступ к функциям jni.
Далее находим класс контекста, id его статического поля TELEPHONY_SERVICE и, собственно, само значение этого поля.
Тут нужно уточнить, что результатом вызова всех методов jni является тип jobject, поэтому используем приведение к типу jstring. Далее находим класс TelephonyManager, и id метода getSystemService класса контекста.

Следующим шагом (решение которого лично у меня заняло больше всего времени) является получение объекта activity. Как видно, это достаточно тривиально, если знаешь как, простите за каламбур.
После мы получаем объект telephonyManager, находим id его метода getDeviceId. Вызываем этот метод и получаем строку imei (не забываем снова приведение типов).
Дальше преобразовываем jstring к типу Qstring.

В принципе, ничего сложного во всём этом нет, но возможно, эта информация будет кому-то полезна и позволит сэкономить немного времени.

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Разобрать значения getAllcellinfo от менеджера телефонии

Я использую следующую функцию, чтобы получить Allcellinfo о сети устройств, и я получаю значения в виде строки, теперь мне нужно проанализировать ее, чтобы получить данные CellSignalStrengthLte, как я могу этого достичь

Как можно проанализировать эту строку, чтобы получить подробности regaridng CellinfoLte,CellIdentityLte

1 ответ

Я также заметил, что CellinfoLTE и CellIdentityLTE в настоящее время не так хороши, поэтому я просто написал свой собственный класс синтаксического анализа. Только проверял это несколько раз, и проблем не было, но должно появиться дополнительное тестирование, если потребуется дополнительная настройка в будущем.

Так что, если я реализую это в основном с помощью входной строки LTE:

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих