Я работаю над приложением для iPhone и действительно хотел бы определить, находится ли устройство в роуминге, чтобы я мог разумно избежать затрат на дорогостоящие подключения моих пользователей, если они находятся вне их домашней сети.
Приложение, которое я пишу, предназначено для взломанных телефонов, однако я бы предпочел использовать стандартные SDK, если это возможно.
Вот что я уже нашел:
1. Apple SDK:
В документации Apple я нашел обещание в API Apple SCNetworkReachability. API предоставляет доступ к таким вещам, как то, находитесь ли вы в WIFI или сети сотовой связи, установлено ли сетевое соединение в настоящее время и т. Д. Однако при поиске в справочном документе SCNetworkReachability API «роуминг» или «роуминг» оба значения обнуляются. Как и их пример кода.
2. Grep джейлбрейкнутого iPhone FS:
На вкладке «Настройки» -> «Общие» -> «Сеть» пользователи могут включать или отключать свой роуминг. Глядя в файл plist для этого ("/Applications/Preferences/Network.plist"), я смог найти следующие ссылки:
PostNotification = "com.apple.commcenter.InternationalRoamingEDGE.changed";
cell = PSSwitchCell;
default = 1;
defaults = "com.apple.commcenter";
key = InternationalRoamingEDGE;
label = "EDGE_ROAMING_TOGGLE";
requiredCapabilities = (
telephony
);
Это, безусловно, преимущество, поскольку, похоже, я могу подписаться на уведомления о том, что пользователь изменил настройки InternationalRoaming. Тем не менее, я не уверен, как превратить это в знание, что они на самом деле, в настоящее время в роуминге.
3. Проверьте класс дампированных источников SpringBoard:
Я сбросил классы SpringBoard, используя class-dump . Мне не удалось найти ссылки на «роуминг» или «роуминг»
4. Очевидно, я начал с проверки в SO для этого:
Не могу найти ничего связанного.
Дальнейшие шаги: у кого-нибудь есть здесь советы?
Я знаю, что это возможно. Однако Apple явно очень трудно найти. Я очень сомневаюсь, что это возможно без использования частной структуры. (например, CoreTelephony). Поскольку это джейлбрейк-приложение, я могу прибегнуть к очистке экрана имени носителя с введенным кодом в SpringBoard, но я бы предпочел не идти по этому пути. Любой совет высоко ценится. Спасибо.