Estoy desarrollando un no-appstore la aplicación para iOS. Quiero leer el celular de la intensidad de la señal en mi código.

Sé que Apple no ofrece ninguna API por el cual podemos lograr esto.

Hay alguna API privada que puede ser utilizado para lograr esto? He ido a través de los diferentes hilos sobre este tema pero no pude encontrar ninguna información relevante.

Es completamente posible porque hay un aplicación en la app-store para la detección de la portadora de la fuerza de la señal.

  • ¿El valor que viene de VAFieldTest es exacta?
InformationsquelleAutor bhatti | 2011-02-10

6 Comentarios

  1. 9

    Brevemente he mirado en el VAFieldTest proyecto ubicado en Github.

    Parece ser getSignalStrength() y register_notification() funciones en Clases/VAFieldTestViewController.m que pueden ser interesantes para usted, como lo llaman en CoreTelephony.framework.

    Estoy bastante segura de que algunas de las llamadas son indocumentados en el CoreTelephony marco de la documentación de Apple y, por tanto, privado de cualquier aplicación en el AppStore debe haber resbalado pasado la inspección.

    • Castillo ¿Cómo puedo convertir la fuerza de la señal que tengo uso de VAFieldTest aplicación dBm?
    • Siga el enlace a Github y usted será capaz de interactuar directamente con Vlad, el mantenedor de VAFieldTest.
    • Es posible obtener otros parámetros : RSCP (nivel de señal), SC (Scrambling Code) y EcNo (Relación Señal A Ruido)?
    • El proyecto se bloquea casi al instante en iOS 9.
    • ¿Alguna idea de cómo OpenSignal su fuerza de la señal de medición ? Ellos muestran que la tecnología y la fuerza de la señal en su pantalla de inicio (probado en iOS 10), y el valor es muy precisa.
    • Relación señal a Ruido es la SNR y es diferente de EcNo. Para Wcdma 3G,SNR es EbNo, que normalmente es un valor positivo frente a EcNo.

  2. 14

    Obtener signalStreght IOS9:

    UIApplication *app = [UIApplication sharedApplication];  
    NSArray *subviews = [[[app valueForKey:@"statusBar"]     valueForKey:@"foregroundView"] subviews];  
    NSString *dataNetworkItemView = nil;  
         for (id subview in subviews) {  
       if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarSignalStrengthItemView") class]])  
       {  
            dataNetworkItemView = subview;  
            break;  
        }  
     }  
    int signalStrength = [[dataNetworkItemView valueForKey:@"signalStrengthRaw"] intValue];  
    NSLog(@"signal %d", signalStrength);
    • Trabaja en iOS9 dispositivos (no en los simuladores)
    • Es esta una API privada github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/… UIKit aparece como público, pero me parece un privado valor.
    • Seguimiento. He construido una pequeña demostración de esto, creó una aplicación en itunes connect, y validada la tienda de presentación de la aplicación de archivo. Esto no es infalible, pero aparentemente la API privada error habría sido provocado?
    • Se bloquea en iOS12 dispositivo, por desgracia
  3. 10

    No es muy difícil.

    1. Enlace CoreTelephony.marco de su proyecto de Xcode
    2. Agregar las siguientes líneas donde usted lo necesita

    Código:

    int CTGetSignalStrength(); //private method (not in the header) of Core Telephony
    
    - (void)aScanMethod
    {
        NSLog(@"%d", CTGetSignalStrength()); //or do what you want
    }

    Y listo.

    Actualización De Mayo De 2016

    Apple retiró esta oportunidad.

    • se ejecuta en iOS 9.1 , pero el valor es 0, es no importa yo uso LTE o Wi-Fi.
  4. 5

    Para obtener la señal de streght en iOS 9 o superior en Swift 3, sin el uso de la API privada de CoreTelephony – CTGetSignalStrength(). Sólo recorriendo la barra de estado de la vista.

    func getSignalStrength() -> Int {
    
        let application = UIApplication.shared
        let statusBarView = application.value(forKey: "statusBar") as! UIView
        let foregroundView = statusBarView.value(forKey: "foregroundView") as! UIView
        let foregroundViewSubviews = foregroundView.subviews
    
        var dataNetworkItemView:UIView!
    
        for subview in foregroundViewSubviews {
            if subview.isKind(of: NSClassFromString("UIStatusBarSignalStrengthItemView")!) {
                dataNetworkItemView = subview
                break
            } else {
                return 0 //NO SERVICE
            }
        }
    
        return dataNetworkItemView.value(forKey: "signalStrengthBars") as! Int
    
    }

    Atención: Si la barra de estado está oculto, la clave de la «barra de estado» se devuelve nil.

    • Me duele mi alma, pero no cumple los requisitos: lo que funciona y no utiliza ningún privado Api. Gracias!
    • apple aprueba?
    • clave utilizadas no existe en ios 10
    • Utiliza la API privada : «el valor(forKey: «signalStrengthBars»)»
    • sí, ya he enviado 2 apps en la App Store con éxito .
    • la clave de la «barra de estado» no existis, pero la barra de estado podrían estar escondidos.
    • Cualquier corrección para IOS 11

  5. 1

    Yo no lo he probado, pero parece que este es ahora un método de CTTelephonyNetworkInfo en lugar de un mundial/función estática.

    El tipo de retorno es id, así que creo que puedes hacer un NSDictionary (como el _cachedSignalStrength ivar implica) o un NSNumber (como el antiguo de la función implica).

    id signalStrength = [[CTTelephonyNetworkInfo new] signalStrength];

    Esto cambió en iOS 8.3, como se puede ver en la cometer.

    Tenga en cuenta que esto aún no documentado! Así que si tu aplicación va a ir en la App Store, tome sus precauciones.

    • signalStrength devuelve null en iOS 9
    • Estoy tratando de conseguir el celular de la fuerza de la señal para iOS 9, pero como se mencionó anteriormente su devuelve 0. El uso de UIStatusBarSignalStrengthItemView no funciona en modo de fondo por lo que no es de ninguna utilidad, ya que los necesitan para obtener la fuerza de la señal en el fondo. Por favor, hágamelo saber si alguien es capaz de obtener los valores.
  6. 0

    Aquí Lucas’ respuesta convertido a Xamarin, y probado en iOS 10.2.1:

    var application = UIApplication.SharedApplication;
    var statusBarView = application.ValueForKey(new NSString("statusBar")) as UIView;
    var foregroundView = statusBarView.ValueForKey(new NSString("foregroundView")) as UIView;
    
    UIView dataNetworkItemView = null;
    foreach (UIView subview in foregroundView.Subviews)
    {
        if ("UIStatusBarSignalStrengthItemView" == subview.Class.Name)
        {
            dataNetworkItemView = subview;
            break;
        }
    }
    if (null == dataNetworkItemView)
        return false; //NO SERVICE
    
    int bars = ((NSNumber)dataNetworkItemView.ValueForKey(new NSString("signalStrengthBars"))).Int32Value;

Dejar respuesta

Please enter your comment!
Please enter your name here