получить имя оператора и уровень сигнала вернуть неправильное значение в iphone - PullRequest
1 голос
/ 24 ноября 2011

Мне любопытно, почему я получаю неправильное значение, чтобы получить имя оператора и уровень сигнала.Здесь код.

CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *car = [netinfo subscriberCellularProvider];
NSLog(@"Carrier Name: %@", car.carrierName);
[netinfo release];

Почему я получаю значение «несущая» вместо несущей, которую я использую?

это код для получения уровня сигнала

void *libHandle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony", RTLD_LAZY);
int (*CTGetSignalStrength)();
CTGetSignalStrength = dlsym(libHandle, "CTGetSignalStrength");
if( CTGetSignalStrength == NULL) NSLog(@"Could not find CTGetSignalStrength");  
int result = CTGetSignalStrength();
NSLog(@"Signal strength: %d", result);
dlclose(libHandle);

, как я знаю, уровень сигналанаходится в значении дБм (в отрицательном значении), но почему вышеупомянутое значение показывает положительное значение и теперь показывает уровень сигнала?есть ли какое-либо сопоставление значений для представления уровня сигнала на дБм

PS Я запустил программу на реальных устройствах iphone и все еще получил неправильное значение.

любая помощь будет признательна.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 24 ноября 2011

О носителе: запуск вашего кода на симуляторе дает мне nil, а при запуске на устройстве правильно говорит 2011-11-24 10:49:05.182 testapp[12579:707] Carrier Name: Vodafone.de, поэтому код абсолютно корректен (работает на iOS 5.0.1 с использованием Xcode 4.2).Может быть, ваш оператор не заполнил поле правильно?В любом случае я хотел бы рассмотреть возможность тестирования на другом устройстве или на другой SIM-карте.

Относительно уровня сигнала: поскольку CTGetSignalStrength представляется довольно недокументированным API, значения могут быть произвольно определены Apple (и переопределены также).).В любом случае это, по-видимому, значение RSSI (индикация уровня принятого сигнала), которое является более или менее положительным числом, где 1 - наихудший уровень сигнала, а верхний - лучше.В связи с этим нет предопределенного (задокументированного и, следовательно, стабильного) доступного сопоставления со значениями в дБм, сопоставление, вероятно, придется создавать экспериментально.

2 голосов
/ 02 марта 2012

Довольно часто значения силы сигнала возвращаются в виде целых чисел.Хитрый момент - это сопоставление с соответствующим значением дБм.Обычно значения int обеспечивают разрешение 0,5, 1 или 2 дБм.Значения дБм, сообщаемые трубкой / модемом, обычно находятся в диапазоне от -115 до -51 дБм для 2G (GSM / EDGE) и от -120 до -25 дБм для 3G (UMTS / HSxPA) и представляют RSSI (индикатор уровня принятого сигнала).

Например, API Android использует сопоставление 3GPP по умолчанию (см. Справочник по Android).

Также следует учитывать, что модем в основной полосе отличается в iPhone 4S (Qualcomm)и более ранние модели, которые использовали Infineon Gold.

...