Esiste un modo per conoscere programmaticamente il corriere su un iPhone?Recupero nome operatore da iPhone a livello di programmazione
** Aggiornamento **
Sto cercando il nome del gestore, che l'iPhone è collegato.
Esiste un modo per conoscere programmaticamente il corriere su un iPhone?Recupero nome operatore da iPhone a livello di programmazione
** Aggiornamento **
Sto cercando il nome del gestore, che l'iPhone è collegato.
In iOS 4, il quadro CoreTelephony è utilizzabile, ecco un frammento di ottenere il nome del gestore:
CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [netinfo subscriberCellularProvider];
NSLog(@"Carrier Name: %@", [carrier carrierName]);
[netinfo release];
Link contro CoreTelephony e includere nelle intestazioni:
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>
Secondo la documentazione di Apple, questo ti dà sempre informazioni sul tuo operatore honme, non sul corriere al quale sei attualmente connesso durante il roaming. – phoenies
Non dimenticare di inserire '#import
Aggiungi #import
Non esiste alcuna API pubblica per ottenere il nome del gestore. Se non è necessario pubblicare su App Store, è possibile utilizzare le API private.
VVCarrierParameters.h
nel pacchetto VisualVoiceMail sembra avere un metodo di classe carrierServiceName
che potrebbe essere quello che ti serve. Rilascia l'intestazione nel tuo progetto e chiama [VVCarrierParameters carrierServiceName]
.
Nota che la tua app verrà rifiutata molto probabilmente se lo fai.
C'è un modo però è disponibile solo su iOS 4 in modo da non essere in grado di utilizzarlo su versioni precedenti. E questo probabilmente rompe anche la tua retrocompatibilità.
Giusto per fare un nota qui .. Ho testato questa API su diverse SIM e sembra che il nome dell'operatore a cui è bloccato iPhone sia restituito con [carrer carrierName] !!
L'ho provato su 2 iPhone, uno bloccato e l'altro no, e per quello bloccato, indipendentemente dal provider SIM, restituisce il nome dell'operatore a cui è bloccato ogni volta che eseguo la mia app di test. Si noti tuttavia che il MNC cambia!
Buon commento Non ne sono a conoscenza fino a quando non ho visto questa risposta Posso confermare che sto ottenendo lo stesso comportamento: il carrierName restituisce il nome dell'operatore bloccato, non il gestore SIM. –
Testato su iOS 7, telefono sbloccato: restituisce sempre "Carrier "come carrierName. Quindi non è possibile capire correttamente quale operatore è nel telefono rned è uguale alla stringa visualizzata in Impostazioni -> Generale -> Informazioni su Gestore. Il numero di versione è stato perso, tuttavia. – Legoless
Questo è corretto. MNC è l'unico test accurato del corriere di CTCarrier. Memorizziamo anche il valore MNC, poiché restituirà zero se l'utente non ha una connessione di rete, è in modalità aereo o ha rimosso la SIM. – NSAlexC
Durante lo sviluppo di Alpha, ho riscontrato lo stesso problema. Il progetto stesso non si limitava a utilizzare solo API pubbliche, quindi per prima cosa ho provato la soluzione di @Jason Harwig. Perché non riuscivo a farlo funzionare, ho pensato a un'altra opzione.
mia soluzione utilizza API privato per accedere alla _serviceString
Ivar dell'etichetta (UIStatusBarServiceItemView
) che viene visualizzato nella barra di stato.
Si basa sulla barra di stato con un valore di portante e ha solo bisogno di UIKit
per funzionare.
- (NSString *)carrierName
{
UIView* statusBar = [self statusBar];
UIView* statusBarForegroundView = nil;
for (UIView* view in statusBar.subviews)
{
if ([view isKindOfClass:NSClassFromString(@"UIStatusBarForegroundView")])
{
statusBarForegroundView = view;
break;
}
}
UIView* statusBarServiceItem = nil;
for (UIView* view in statusBarForegroundView.subviews)
{
if ([view isKindOfClass:NSClassFromString(@"UIStatusBarServiceItemView")])
{
statusBarServiceItem = view;
break;
}
}
if (statusBarServiceItem)
{
id value = [statusBarServiceItem valueForKey:@"_serviceString"];
if ([value isKindOfClass:[NSString class]])
{
return (NSString *)value;
}
}
return @"Unavailable";
}
- (UIView *)statusBar
{
NSString *statusBarString = [NSString stringWithFormat:@"%@ar", @"_statusB"];
return [[UIApplication sharedApplication] valueForKey:statusBarString];
}
Ho testato solo il metodo con le applicazioni con barra di stato visibile. Restituisce la stessa stringa che viene visualizzata nella barra di stato, quindi funziona correttamente anche in roaming.
Questo metodo non è sicuro in App Store.
Per gli utenti veloci si può provare questo:
import CoreTelephony
static var carrierName:String? {
let networkInfo = CTTelephonyNetworkInfo()
let carrier = networkInfo.subscriberCellularProvider
return carrier?.carrierName
}
ottenere il nome vettore dalla barra di stato nel caso se Nucleo Telefonia restituisce "Carrier"
func getCarrierName() -> String? {
var carrierName: String?
let typeName: (Any) -> String = { String(describing: type(of: $0)) }
let statusBar = UIApplication.shared.value(forKey: "_statusBar") as! UIView
for statusBarForegroundView in statusBar.subviews {
if typeName(statusBarForegroundView) == "UIStatusBarForegroundView" {
for statusBarItem in statusBarForegroundView.subviews {
if typeName(statusBarItem) == "UIStatusBarServiceItemView" {
carrierName = (statusBarItem.value(forKey: "_serviceString") as! String)
}
}
}
}
return carrierName
}
cosa, vuoi dire ci sono iPhone vettori diversi da AT & T? –
Stai parlando di chi è il servizio al quale il telefono è attualmente connesso (ad esempio potrebbe essere il roaming) o chi è il gestore da cui ricevi le fatture? – crashmstr
Potresti non averne sentito parlare, ma ci sono altri paesi nel mondo. E, cosa interessante, hanno la tecnologia mobile. – mentat