携帯キャリアの情報を取得する
CoreTelephony.framework を使えばできるらしい。知らなかった。
CTTelephonyNetworkInfo
をインスタンス化して subscriberCellularProvider
メソッドを呼べば CTCarrier
でキャリア情報が取得できる。
CTCattier
にはキャリア情報に関するいくつかのプロパティがあるが description
で情報をまとめて見る事ができる。
description
の例は以下
CTCarrier (0x1700598c0) { Carrier name: [ソフトバンクモバイル] Mobile Country Code: [440] Mobile Network Code:[20] ISO Country Code:[jp] Allows VOIP? [YES] }
デバイスを英語環境にしてもキャリア名は日本語名のまま表示されたので、常に現地語で表示されるかもしくはCountry Code準拠なのかも知れない。
currentRadioAccessTechnology
メソッドでは LTE, Edge, CDMA など、どの通信規格に接続しているかが取得できる。定義のリストには WCDMA, CDMAEVDORev0, CDMAEVDORevA, CDMAEVDORevB などがあるので結構細かく取得できる模様。
キャリアの変更は subscriberCellularProviderDidUpdateNotifier
プロパティのブロックで検出可能。
通信規格の変更は CTRadioAccessTechnologyDidChangeNotification
で検出可能。
Twitter の DIGITS の様に、アプリ内に電話番号入力画面を用意する際の国番号のデフォルト値を設定するのに CTCarrier
の情報が利用できそう。