2015-02-05 1 views
2

Я пытаюсь проверить, есть ли у устройства сотовая услуга (а не данные), и если да, то разрешите им совершить звонок. В настоящее время я использую [[UIApplication sharedApplication] canOpenURL:numberURL], чтобы узнать, может ли устройство делать телефонные звонки, которые, очевидно, вернут YES, если это iPhone или другое устройство, когда я читаю. В настоящее время я тестирую устройство, у которого нет службы несущей. Любая помощь по этому поводу будет очень признательна, спасибо.Определите, есть ли у телефона сотовая услуга iOS 8

+1

[этот вопрос] (http://stackoverflow.com/questions/853467/retreiving-carrier-name-from-iphone-programmatically) может помочь – Daniel

+0

Спасибо, это дает мне информацию о несущей и других сетевых статусах, но я все еще не могу определить, имеет ли устройство сервис или нет. Несмотря на то, что на моем устройстве указано «Нет обслуживания», оператор и коды все еще доступны, как и раньше, от AT & T. –

ответ

1

Насколько я знаю, вы можете играть с информацией о несущей вашего телефона с каркасом CoreTelephony.

Проверьте это для себя: https://developer.apple.com/library/prerelease/ios/documentation/NetworkingInternet/Reference/CoreTelephonyFrameworkReference/index.html#//apple_ref/doc/uid/TP40009603

https://developer.apple.com/library/prerelease/ios/samplecode/CoreTelephonyDemo/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010746

EDIT:

https://developer.apple.com/library/prerelease/ios/documentation/NetworkingInternet/Reference/CTTelephonyNetworkInfo/index.html#//apple_ref/occ/instp/CTTelephonyNetworkInfo/subscriberCellularProvider

Попробуйте класс 'CTCarrier' и посмотреть, если это решит вашу проблему.

@property(readonly, retain) CTCarrier *subscriberCellularProvider 

Discussion 
A CTCarrier object that contains information about the user’s home cellular service provider—that is, the provider with whom the user has an account. This information is available immediately after you allocate and initialize the CTTelephonyNetworkInfo object. 
+0

Правильно, но я не могу определить, имеет ли устройство сервис или нет в API. Я пробовал много разных подходов, но все, похоже, не работают ... –

+0

Хотели бы вы предоставить дополнительную информацию? – Popeye

+0

'CTCarrier' не возвращает ничего, что я могу найти, чтобы его использовали для обнаружения, если телефон находится в эксплуатации или нет. Как указано в моем вопросе, у меня уже был сервис с этим устройством, и у меня больше нет службы, поэтому я не могу совершать звонки, а 'subscriberCellularProvider' возвращает ту же информацию, что и в случае, если у телефона есть сотовая связь. –

-1

Вы, вероятно, ищете что-то вроде Reachability. Вы можете использовать этот класс для определения возможности подключения к сети и средств, с которыми подключено устройство, либо ReachableViaWiFi, либо ReachableViaWWAN.

Существует одна оговорка, касающаяся достижимости, которую вы должны знать перед ее использованием. Иногда достижимость будет сообщать о том, что соединение отсутствует, но на самом деле связь может быть установлена, если запрос был предпринят. Лучшее использование Reachability - после неудачного запроса, когда устройство может быть уверенным, что оно не может установить соединение, и вы можете сообщить об этом пользователю.

+0

Это только сообщит мне о действительном подключении к Интернету прямо? –

+0

Это правда, однако, возможны ложные негативы, поэтому вы всегда должны сначала сделать запрос. –

+0

Как не каждый оператор позволяет звонить через Wi-Fi (с iOS 8), я не думаю, что это решит мою проблему. Если у пользователя есть устройство, которое имеет действительное подключение к Интернету через беспроводную сеть или данные, но в их текущем плане нет голоса, это не решит проблему правильно? –

0

Вы можете проверить, если устройство имеет носитель с сим-карты:

`CTTelephonyNetworkInfo telephonyNetworkInfo = [[CTTelephonyNetworkInfo Alloc] инициализации];

CTCarrier несущей = [telephonyNetworkInfo subscriberCellularProvider]; `

проверка для любого из следующих свойств на carrier, чтобы узнать, есть ли носитель по телефону:

carrier.carrierName carrier.carriermobileCountryCode carrier.mobileNetworkCode carrier.isoCountryCode

+0

Устройство, содержащее сим-карту без обслуживания (например, используемое мной устройство), сохраняет все значения свойств, перечисленные выше, от последнего используемого оператора, поэтому это не будет работать для устройств, которые все еще содержат сим-карту, но не имеют оказание услуг. –

+0

Тогда, возможно, вы можете использовать 'CTGetSignalStrength', это фактически не документировано, но вы можете использовать его или использовать http://stackoverflow.com/questions/8254327/get-carrier-name-and-signal-strength-return-wrong -value-in-iphone или http://stackoverflow.com/questions/15427507/how-to-find-out-carrier-signal-strength-programatically – Mepla

+0

Является ли «CTGetSignalStrength» что-то, что принято в магазине приложений? –

 Смежные вопросы

  • Нет связанных вопросов^_^