2012-05-07 28 views
6

Tôi đang sử dụng câu trả lời trong chủ đề này. iPhone - how to determine carrier of the device (AT&T, Verizon, etc?) giống với getting operator details in iphone. Mặc dù nó hoạt động tốt khi sử dụng thẻ sim, tên nhà cung cấp đã trả lại nếu không có thẻ SIM là tên nhà cung cấp dịch vụ cũ. Nó không phát hiện ra rằng SIM được lấy ra.iPhone - Phát hiện tính khả dụng của thẻ SIM

Tôi biết điều này mâu thuẫn với tài liệu của Apple rằng nếu không có nhà cung cấp dịch vụ, đối tượng CTCarrier sẽ là không. Nhưng trong ứng dụng của tôi, tôi đã ghi lại thông tin về nhà cung cấp dịch vụ và nó mang lại cho tôi tên nhà cung cấp dịch vụ mới nhất mặc dù không có sim nào được cài đặt.

Trả lời

7

Theo documentation cho [CTCarrier carrierName]:

Nếu bạn cấu hình thiết bị cho một tàu sân bay và sau đó tháo thẻ SIM, khách sạn này vẫn giữ được tên của người vận chuyển.

Theo như tôi biết, bạn không thể phát hiện xem thẻ SIM đã được cài đặt hay chưa. Bạn chỉ có thể xác định xem kết nối WWAN có khả dụng không bằng cách sử dụng Reachability.

+1

này đã giúp nhưng không giải quyết vấn đề. Kết nối WWAN có thể không tồn tại, nhưng thẻ SIM vẫn có thể được chèn (nếu người dùng tắt dữ liệu và 3G). –

+1

Phải, và không có cách nào để kiểm tra xem thẻ SIM có hiện diện hay không. –

+1

Trong cùng một liên kết tài liệu bạn cung cấp, không thể sử dụng 'mobileCountryCode' hoặc' mobileNetworkCode' để phát hiện xem SIM có hiện diện hay không? Tài liệu cho biết các giá trị đó sẽ là 'nil' nếu không có SIM. Nó không có vẻ là những tài sản được giữ lại – wnafee

4

Đối tượng CTCarrier có 5 thuộc tính:

allowsVOIP 
carrierName 
isoCountryCode 
mobileCountryCode 
mobileNetworkCode 

Tôi đã thực hiện một số xét nghiệm về CTCarrier và tôi đã đi đến kết luận rằng cho iOS 7 chỉ CARRIERNAME và allowsVOIP được giữ lại khi SIM được lấy ra. isoCountryCode, mobileCountryCode và mobileNetworkCode được đặt lại cho iOS 7. Đó là cách bạn có thể phát hiện xem SIM có hiện diện hay không.

Đối với iOS 6 tất cả các giá trị được giữ lại.

tôi thực hiện các cuộc thử nghiệm sử dụng một chiếc iPhone 4S và iPhone 5 cả hai chạy iOS 7.

6
@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; 
} 
0

phiên bản Swift:

func hasCellularCoverage() -> Bool { 

    let networkInfo = CTTelephonyNetworkInfo() 

    guard let info = networkInfo.subscriberCellularProvider else {return false} 

    if let carrier = info.isoCountryCode { 
     print("No sim present Or No cellular coverage or phone is on airplane mode. Carrier = \(carrier)"); 
     return true 
    } 

    return false 

} 

hoặc

func hasCellularCoverage() -> Bool { 

    let networkInfo = CTTelephonyNetworkInfo() 

    guard let info = networkInfo.subscriberCellularProvider else {return false} 

    return info.isoCountryCode != nil ? true : false 

} 
+0

Cảm ơn bạn đã chia sẻ mã. Tôi không nghĩ rằng nó phát hiện chế độ máy bay mặc dù. –

Các vấn đề liên quan