11

このトピックの回答を使用しています。iPhone - デバイスの通信事業者 (AT&T、Verizon など) を判別する方法。これはiphone でオペレーターの詳細を取得するのと同じです。SIMカード使用時は問題なく動作しますが、SIMカードがない場合に返されるキャリア名は旧キャリア名です。SIM が取り外されたことを検出しません。

これは、キャリアがない場合、CTCarrierオブジェクトはnilになるというAppleのドキュメントと矛盾していることを知っています。しかし、私のアプリでキャリア情報を記録したところ、sim がインストールされていなくても最新のキャリア名が表示されました。

4

6 に答える 6

12

のドキュメントによると[CTCarrier carrierName]

通信事業者用にデバイスを構成してから SIM カードを取り外した場合、このプロパティは通信事業者の名前を保持します。

私の知る限り、SIM カードがインストールされているかどうかを検出することはできません。を使用してのみ、WWAN 接続が利用可能かどうかを判断できますReachability

于 2012-05-07T20:59:52.557 に答える
9
@import CoreTelephony;

-(BOOL)hasCellularCoverage
{
    CTTelephonyNetworkInfo *networkInfo = [CTTelephonyNetworkInfo new];
    CTCarrier *carrier = [networkInfo subscriberCellularProvider];


    if (!carrier.isoCountryCode) {
        NSLog(@"No sim present Or No cellular coverage or phone is on airplane mode.");
        return NO;
    }
    return YES;
}
于 2015-01-13T12:52:14.690 に答える
8

CTCarrierオブジェクトには 5 つのプロパティがあります。

allowsVOIP
carrierName
isoCountryCode
mobileCountryCode
mobileNetworkCode

CTCarrier に関していくつかのテストを行った結果、iOS 7 では、SIM を取り外したときに、carrierName と allowVOIP のみが保持されるという結論に達しました。iOS 7 では isoCountryCode、mobileCountryCode、mobileNetworkCode がリセットされます。これにより、SIM が存在するかどうかを検出できます。

iOS 6 の場合、すべての値が保持されます。

iOS 7 を実行している iPhone 4S と iPhone 5 を使用してテストを実行しました。

于 2013-12-16T13:15:13.333 に答える