¿Hay alguna manera de conocer el soporte de la célula en un iPhone mediante programación?Recuperando el nombre del operador del iPhone mediante programación
** ** actualización
Busco el nombre de la compañía, que el iPhone está conectado.
¿Hay alguna manera de conocer el soporte de la célula en un iPhone mediante programación?Recuperando el nombre del operador del iPhone mediante programación
** ** actualización
Busco el nombre de la compañía, que el iPhone está conectado.
En IOS 4, el marco CoreTelephony es utilizable, He aquí un fragmento de obtener el nombre de la compañía:
CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [netinfo subscriberCellularProvider];
NSLog(@"Carrier Name: %@", [carrier carrierName]);
[netinfo release];
Enlace contra CoreTelephony e incluir en sus cabeceras:
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>
De acuerdo con la documentación de Apple, esto siempre le brinda información sobre su transportista honme, no sobre el transportista al que está actualmente conectado cuando está en roaming. – phoenies
No olvide poner '#import
Agregue #import
No hay una API pública para obtener el nombre del operador. Si no necesita publicar en la App Store, puede utilizar aplicaciones privadas.
VVCarrierParameters.h
en el paquete VisualVoiceMail parece tener un método de clase carrierServiceName
que podría ser lo que necesita. Suelta ese encabezado en tu proyecto y llama al [VVCarrierParameters carrierServiceName]
.
Tenga en cuenta que su aplicación probablemente será rechazada si hace esto.
Hay una manera tal que es sin embargo sólo está disponible en iOS 4 por lo que no será capaz de utilizarlo en versiones anteriores. Y esto probablemente también rompa tu compatibilidad con versiones anteriores.
sólo para hacer una nota aquí ... Probé esta API en SIM diferentes y parece que el nombre del operador con el que está bloqueado el iPhone se devuelve con [carrer carrierName] !!
He probado esto en 2 iphones, uno bloqueado y el otro no, y para el bloqueado, independientemente del proveedor de SIM, devuelve el nombre del operador que está bloqueado cada vez que ejecuto mi aplicación de prueba. ¡Sin embargo, tenga en cuenta que el MNC sí cambia!
Buen comentario. No tuve conocimiento de esto hasta que vi esta respuesta. Puedo confirmar que estoy obteniendo el mismo comportamiento: carrierName devuelve el nombre del operador bloqueado, no el operador SIM. –
probado en iOS 7, teléfono desbloqueado: siempre devuelve "operador "como carrierName. Por lo tanto, no es posible determinar correctamente qué operador está en el teléfono. rned es igual a la cadena que se muestra en Configuración -> General -> Acerca de en Carrier. Sin embargo, el número de versión se pierde. – Legoless
Esto es correcto. MNC es la única prueba precisa de portadora de CTCarrier. Caché también el valor MNC, ya que devolverá nulo si el usuario no tiene conexión de red, está en modo avión o ha eliminado su SIM. – NSAlexC
Durante el desarrollo de Alpha, me encontré con el mismo problema. El proyecto en sí no estaba limitado a usar API pública, así que primero probé la solución de @Jason Harwig. Como no podía hacer que funcionara, pensé en otra opción.
Mi solución utiliza la API privada para acceder a la _serviceString
Ivar de la etiqueta (UIStatusBarServiceItemView
) que se muestra en la barra de estado.
Se basa en la barra de estado que tiene un valor de portadora y solo necesita UIKit
para funcionar.
- (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];
}
Solo probé el método con aplicaciones que tienen una barra de estado visible. Devuelve la misma cadena que se muestra en la barra de estado, por lo que funciona correctamente incluso en itinerancia.
Este método no es seguro para la App Store.
Para los usuarios de SWIFT puede probar esto:
import CoreTelephony
static var carrierName:String? {
let networkInfo = CTTelephonyNetworkInfo()
let carrier = networkInfo.subscriberCellularProvider
return carrier?.carrierName
}
obtener el nombre portadora de barra de estado en el caso si la base de telefonía devuelve "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
}
¿Qué, decir que hay iPhone portadores que no sean AT & T? –
¿Estás hablando de a quién está conectado el teléfono actualmente (es decir, puede estar en roaming) o quién es el operador del que recibes las facturas? – crashmstr
Es posible que no haya oído hablar de él, pero hay otros países en el mundo. Y curiosamente, tienen tecnología móvil. – mentat