Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.79
yura91
29 / 27 / 2
Регистрация: 23.10.2013
Сообщений: 2,235
#1

Программно определить уровень антенны на телефоне - Android

16.07.2014, 17:02. Просмотров 4084. Ответов 27
Метки нет (Все метки)

Можно ли как нибудь узнать программно уровень антенны на телефоне?Если да то как?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
raxp
10147 / 6534 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
16.07.2014, 20:38     Программно определить уровень антенны на телефоне #2
...не уровень антенны, а уровень сигнала от базовой станции. Уровень сигнала может колебаться в интервале от -113 dBm (слабый сигнал) до -50 dBm (мощный сигнал). Если через последовательный порт извне, то 'AT+CSQ'.

А так через класс android.telephony.SignalStrength, параметр signalStrength.getGsmSignalStrength().
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
20.07.2014, 17:45     Программно определить уровень антенны на телефоне #3
Цитата Сообщение от raxp Посмотреть сообщение
signalStrength.getGsmSignalStrength()
Попробовал... странные цифры получил!
Телефон показывает 4 полоски из 4х на обоих симках... а результат команды обычно 15-17 из 31(по документации). Теоретически это равно 2м полоскам... Не знаете что это значит? Хотелось бы получить то-же что видит юзер в статус-панели телефона! Телефон на столе... цифры прыгают 15-19... а в шапке все еще 4 полосы...
raxp
10147 / 6534 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
20.07.2014, 19:12     Программно определить уровень антенны на телефоне #4
...отнюдь, цифры не странные, это вы делаете ложный вывод, что ПО телефона обязано юзеру отображать в точной пропорции и без округления в соответствии с разрядностью отображения.

цифры прыгают 15-19... а в шапке все еще 4 полосы...
и правильно делают, уровень сигнала зависит от условий в канале связи, дерево шелохнулось на пути сигнала, человек прошелся, сигнал уже меняется. А еще есть такая вещь как фильтрация, усреднение во времени резких скачков. Вот была бы разрядность полосок не 4, а 100 полосок на индикаторе, тогда другое дело. Только вот эргономика не позволяет сто полос нарисовать, негде.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
20.07.2014, 19:29     Программно определить уровень антенны на телефоне #5
все равно не понятно! Неужели системный индикатор (4 полосы) настолько врет?
15/31 это меньше 2х полос!
20/31 это максимум 3 полосы (2.58 из 4)
Сижу за столом(не двигаю). Здесь ВСЕГДА 4 полосы... А по данным функции получает 2-3...
Ладно бы "не успевал" обновлять системный индикатор, но ведь сигнал не падает!
raxp
10147 / 6534 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
20.07.2014, 20:35     Программно определить уровень антенны на телефоне #6
...вы знаете, восклицательные знаки меня не впечатляют, думаю, даже уверен, мало кого на форуме впечатляют. Это приравнивается к крику.

Вы слышали о нелинейной шкале? Об усреднении и маркетинге?
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
20.07.2014, 20:42     Программно определить уровень антенны на телефоне #7
Цитата Сообщение от raxp Посмотреть сообщение
Это приравнивается к крику.
Для меня это ("!") акцентирование внимание на предложении. Не более... "!!!" - это уже крик!

Цитата Сообщение от raxp Посмотреть сообщение
Вы слышали о нелинейной шкале?
слышал, но как тогда эти цифры превратить в 4 полоски? нелинейных шкал может быть много...

Цитата Сообщение от raxp Посмотреть сообщение
маркетинге?
Как это может относиться к уровню сигнала? Типа "у нас лучше чем у других"? "У нокии 2 полоски, а у нас всегда 4"?
raxp
10147 / 6534 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
20.07.2014, 21:14     Программно определить уровень антенны на телефоне #8
слышал, но как тогда эти цифры превратить в 4 полоски? нелинейных шкал может быть много...
кусочно-линейной аппроксимацией. В вашем случае достаточно пары-тройки if-ов.

Типа "у нас лучше чем у других"?
во-от, в верном направлении мысль пошла. Такое у производителей мобильных аппаратов далеко не редкость, каждый на свой лад.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
20.07.2014, 22:28     Программно определить уровень антенны на телефоне #9
Цитата Сообщение от raxp Посмотреть сообщение
кусочно-линейной аппроксимацией. В вашем случае достаточно пары-тройки if-ов
Странно все это! И в инструкциях хоть где-то должны были быть инструкции. И апи вроде универсальное - значит могли подменять цифры еще на этапе драйверов, а не индикаторов... И с иф-ами очень долго буду статистику набирать. И универсальность между устройствами теряется.

Мне надо сделать аналог виджета с состоянием уровня сигнала. Таких сотни на маркете и многие работают... И сигналку повесить (реактор) на падение сигнала ниже уровня (как в батарейке). Но КАК поймать реальный уровень и сравнить его например с 1й полоской? Бегать по городу и искать "ямы"?
raxp
10147 / 6534 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
21.07.2014, 07:47     Программно определить уровень антенны на телефоне #10
...вы погодьте. Причем тут инструкции? Цифры - есть реальные адекватные данные, мнемоническая же индикация не имеет отношения к реальным значениям, это мнемоническая усредненная децимированная прореженная шкала и о никакой универсальности речи быть не может.

Когда делал ActiveX компонент OPC-SMS шлюза, то уровень сигнала в ответе на +CSQ для четырех полосок мнемонически сделал так:
Pascal
1
2
3
4
5
    if csq>80               then il.GetBitmap(2, gsm3.Picture.Bitmap); //0 полосок
    if (csq>31)and(csq<=80) then il.GetBitmap(3, gsm3.Picture.Bitmap); //1
    if (csq>16)and(csq<=31) then il.GetBitmap(4, gsm3.Picture.Bitmap); //2
    if (csq>10)and(csq<=16) then il.GetBitmap(5, gsm3.Picture.Bitmap); //3
    if csq<=10              then il.GetBitmap(6, gsm3.Picture.Bitmap)  //4
ValeryS
Модератор
6511 / 4977 / 460
Регистрация: 14.02.2011
Сообщений: 16,485
21.07.2014, 08:07     Программно определить уровень антенны на телефоне #11
yura91,
А с чего ты взял что на индикаторе показывают мощность сигнала?
там вполне может быть, и даже скорее всего,качество сигнала
4 полосы без потерь пакетов
3 полосы незначительная потеря
2 полосы потери
1 полоса потери существенные( голос затыкается)
0 полос пакеты не доходят
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
21.07.2014, 08:26     Программно определить уровень антенны на телефоне #12
Понятно! И извените за недоверие! Нагуглил десяток форумов где пытаются безуспешно решить эту проблему... у всех левые цифры показывает. Похожие, но левые... А у многи вообще вечны ноль!

Себе поставил около 5 измерителей - все показывают сигнал не больше 52% при 4х делениях. Один даже график красивый рисует - в среднем 45%. А полоски лишь на минуту-две (в час) уменьшились с 4х до 3х... Помню просто (больше полугода назад) ставил виджеты, и цифры в Дб бегали - думал "осталось просто понять как получить" и смогу свой индикатор нарисовать ("не хуже системного")... Короче в очередной раз гугловцы скриворучили...

А можно ли получить аналог команды +CSQ "изнутри"? Может точнее будет? Более похожим на системный индикатор?

Добавлено через 4 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
А с чего ты взял что на индикаторе показывают мощность сигнала?
там вполне может быть, и даже скорее всего,качество сигнала
А какая разница? Пользователю все равно... "сильнее антена = лучше связь". К тому-же "1 полоса потери существенные( голос затыкается)" можно поймать лишь при разговоре. В режиме ожидания канал минимальный (системный обмен), а линии все равно рисует относительно верно (1 = связь будет очень плохой).

Добавлено через 2 минуты
Меня смутила лишь одна программа - она показывает уровень не только для текущей соты, но и для 5ти соседних. Где-то лишь на 10-15% меньше. Может это тоже влияет на кво линий?
ValeryS
Модератор
6511 / 4977 / 460
Регистрация: 14.02.2011
Сообщений: 16,485
21.07.2014, 08:30     Программно определить уровень антенны на телефоне #13
Цитата Сообщение от Tester64 Посмотреть сообщение
А какая разница? Пользователю все равно...
пользователю да
инженеру нет
можно иметь мощный сигнал и рядом источник помех и все, пакеты не доходят
что рисовать будем?
уровень на антенне или качество сигнала?
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
21.07.2014, 09:10     Программно определить уровень антенны на телефоне #14
Цитата Сообщение от ValeryS Посмотреть сообщение
пользователю да
инженеру нет
Я инженер, но подзабыл уже... Как определяется "уровень сигнала в GSM"? Кво каналов в диапазоне ограничено, они могут пересекаться (двое заняли один канал). Амплитуда сигнала в FM игнорируется ради помехоустойчивости - думаю в GSM еще сложнее. Но уровень сигнала как амплитуда уже давно не имеет значения. Только количество свободных каналов и их устойчивость к помехам... А эти 2 параметра ИМХО вполне можно обозвать "качеством сигнала" по некой сложной формуле, зашитой в чип...

Меня возмущает лишь тот факт что система для индикатора использует одни данные, а в API от гугла выдает совсем другие, не совместимые с системными. И вообще гугл сильно отстает от мира мобильного рынка - где сигнал для второй симки? Нашел только какие-то исходники на си с хелпами на англо-китайском...
raxp
10147 / 6534 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
21.07.2014, 12:29     Программно определить уровень антенны на телефоне #15
А можно ли получить аналог команды +CSQ "изнутри"?
CSQ возвращает то же что и signalStrength.getGsmSignalStrength() (-113 dBm (слабый сигнал) до -50 dBm (сильный сигнал)) + качество сигнала, через запятую.

Если бы вы порылись в кишках класса http://developer.android.com/referen...lStrength.html, то нашли бы и getGsmBitErrorRate и SNR/
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
21.07.2014, 14:02     Программно определить уровень антенны на телефоне #16
Цитата Сообщение от raxp Посмотреть сообщение
getGsmBitErrorRate и SNR
У меня оба параметра = -1, хотя соотношение согласно документации должно быть 0..8
Надеялся что это (умножив/разделив) приблизит меня к 4м полоскам!
raxp
10147 / 6534 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
21.07.2014, 19:04     Программно определить уровень антенны на телефоне #17
Не факт, что API телефона поддерживает полностью данный класс.

Надеялся что это (умножив/разделив) приблизит меня к 4м полоскам!
притянуто за уши. Поймите, 4 - полоски - это мнемоника, а не инженерный параметр и стандартов на него нет, кроме разве внутри производителей.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
21.07.2014, 21:45     Программно определить уровень антенны на телефоне #18
Цитата Сообщение от raxp Посмотреть сообщение
Поймите, 4 - полоски - это мнемоника, а не инженерный параметр и стандартов на него нет, кроме разве внутри производителей
Мелькала мысль, что умножив на кофициент ошибок, который плавно меняется по жуткой формуе с увеличением/меньшеним мощности. Получу например надежные 100% от которого можно строить полоски.

Сейчас у меня максимум 53% при идеальной связи. Найдено методом долгого изучения графика. Откуда взялась эта цифра не знаю! Как и не знаю что с ней дальше делать. У другого телефона максимум может быть другим (если вообще определится - англо-форумы за 3 года сильно жаловались на 0й сигнал). Если напишу программу, есть БОЛЬШОЙ шанс что она не будет корректно работать на другом устройстве! Пишу свой "комбаин" и хотел добавить пищалку/вибрацию на потерю сигнала (или крупную индикацию во время разговора). Про вторую симку вообще молчу! Думал вот функция - 30 строчек и готово дополнение. А теперь задвигаю в "долгий ящик" до времен когда смогу добраться до чтения китайских исходников...
raxp
10147 / 6534 / 477
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
21.07.2014, 22:01     Программно определить уровень антенны на телефоне #19
...а вы рядом с полосками или вместо просто выводите числа, к ним как раз вопросов не будет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2014, 05:08     Программно определить уровень антенны на телефоне
Еще ссылки по теме:

Android Программно определить разрешение экрана
Android Просмотреть БД в телефоне
Android Как программно определить все доступные в данный момент точки доступа WiFi?
Запустить Код на телефоне Android
Как определить на какой номер звонят если в телефоне 2 сим карты? Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
22.07.2014, 05:08     Программно определить уровень антенны на телефоне #20
Цитата Сообщение от raxp Посмотреть сообщение
...а вы рядом с полосками или вместо просто выводите числа, к ним как раз вопросов не будет.
У меня в планах три метода примения для этой технологии:

1) Иду по городу и вдруг падает сигнал до 0. Либо завис GSM модуль либо связь пропала. Хочу знать об этом! До меня не дозвониться! Занести в лог и выдать что сеть пропадала с 5:00 до 6:00. Пищать/орать/вибрировать об этом. Что-бы никто не мог пожаловаться что со мной нет связи... Пока не уверен что 0% соответствует реальному 0! По документации это вообще похоже особый уровень =99 при реальной связи 0..31.

2) Во время разговора я плохо слышу абонента или он жалуется что не слышет меня. Смотрю на малюсенький значок в уголке - но его почти не видно(летнее солце или снег). Почему бы не сделать либо жирную сочную полоску-ползунок по центру экрана во время разговора либо менять цвет всего окна звонка на красный при падении сигнала с огромным предупреждением. Либо вибро/голос/звук на падение сигнала. Смотрю на экран, а там 53%! По логике это половина, а на практике это =100%. А что означает 10%??? Это очень плохо? Или обычному юзеру показывать цифры в децебелах со знаком минус? -79 dBm = это хорошо?

3) GPS трекер. Отправляет позицию и состояние мобилки ребенка/жены/менеджера. Где находится? Есть ли деньги на счету? Почему говорит что не "смог позвонить" в 14:00? Врет или лажа со связью? Статистика по зонам без сети ("мертвые зоны") для менеджеров. "Васе не позвонить - он сейчас в селе Жопово - там связь плохая"
Единственное решение которое вижу - создать ботнет из своих других программ и тайно собрать эту статистику с десятка-сотни телефонов для анализа... Гугл заставляет меня писать вирус!

Добавлено через 6 часов 0 минут
Короче... методом проб и ошибок... для своего телефона (на других еще не тестил) получил константы:
максимальный уровень = 18 (вместо обещаных 31)
4 линии если больше 12
3 если больше 9
2 если больше 5
0 и 1 пока не смог замерить - сигнал дома сильный...

Сделал плавающую панельку с цифрами - буду тестить...
Yandex
Объявления
22.07.2014, 05:08     Программно определить уровень антенны на телефоне
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru