Red de conocimiento informático - Conocimiento informático - Cómo obtener intensidad de la señal LTE en Android

Cómo obtener intensidad de la señal LTE en Android

Detalles de la detección de intensidad de la señal del teléfono móvil Android

Autor: skxy Fuente:: [aumentar o disminuir] Tipo: Reimprimir Hora de reimpresión: 2016-11-17 Quiero comentar

Este artículo presenta la señal de teléfono móvil Android Para información relacionada con la detección de intensidad, Android define dos unidades de señal: dBm y asu. Este artículo le brinda una introducción muy detallada a la relación específica entre los dos. Los amigos necesitados pueden consultarla.

He estado buscando trabajo recientemente y es inevitable que encuentre problemas. De este tipo durante el proceso de la entrevista, el momento que recuerdo con mayor claridad fue cuando me preguntaron durante la entrevista cómo lidiar cuando el teléfono móvil tiene un estado de red débil y cómo monitorear los cambios en la intensidad de la señal de la red. Pero estaba realmente confundido, mis respuestas eran confusas y mi pensamiento no estaba nada claro. Hoy, el autor lo llevará a comprender varios conceptos relacionados con la intensidad de las señales de los teléfonos móviles.

Introducción a la intensidad de la señal de los teléfonos Android

Android define dos unidades de señal: dBm y asu. La relación entre ellos es: dBm = -113+2asu, que es la única unidad de señal definida por Google para teléfonos Android. Por ejemplo, si la intensidad de mi señal es -53 dBm, entonces corresponde a 30 asu porque -53 = -113 + (230).

Detalle de ambos:

asu: La única unidad de señal es una señal analógica. asu simplemente significa la velocidad a la que un teléfono celular transmite su ubicación a torres cercanas. Mide lo mismo que dBm, pero es más lineal.

dBm: Es un valor que representa el valor absoluto de la potencia (también se puede considerar como un ratio basado en 1mW de potencia), y la fórmula de cálculo es 10log (valor de potencia/1mw).

[Ejemplo] Si la potencia P es 1mw, será 0dBm cuando se convierta a dBm.

[Ejemplo] Si la potencia es 0,01 mW, el valor convertido en dBm debe ser: 10log(0,01/1): 10log(0,01/1)=-20dBm.

Cuanto mayor sea el valor, mejor será la señal. Dado que la intensidad de la señal de los teléfonos móviles suele ser menor, la conversión a dBm suele ser negativa.

Las especificaciones de China Mobile estipulan que cuando el nivel de recepción de un teléfono móvil es >= (-90 dBm en zonas urbanas; -94 dBm en zonas rurales), se cumplen los requisitos de cobertura.

Además, la intensidad de la señal inalámbrica aquí cumple con los requisitos de cobertura.

En otras palabras, la intensidad de la señal inalámbrica aquí cumple con los requisitos de cobertura. La intensidad de la señal de -67 dBm es más de 20 dB más fuerte que la intensidad de la señal de -90 dBm,

Por lo tanto, la tasa de éxito de la llamada y la calidad de la voz durante la llamada serán mucho mejores.

dB: Es un valor numérico que representa un valor relativo. Una relación pura solo representa la relación de tamaño relativo entre dos cantidades. No tiene unidad al considerar cuánto dB es mayor o menor que la potencia de A. es que la potencia de B dB, se puede calcular de acuerdo con la siguiente fórmula: 10log (potencia A/potencia B). Si se calcula utilizando la relación de voltaje de los dos, se debe usar 20log (voltaje A/voltaje B). tensión B).

[Ejemplo] La potencia de A es el doble de la potencia de B, entonces 10lg (potencia A/potencia B) = 10lg2= 3dB, es decir, la potencia de A es 3 dB mayor que la potencia de B; por el contrario, si A La potencia de A es la mitad de la potencia de B, entonces la potencia de A es 3 dB menor que la potencia de B.

Resumen: dBm es un número negativo Cuanto más cerca esté de 0, mayor será la intensidad de la señal y mejor será la señal, pero no puede ser 0. asu es un número positivo, cuanto mayor sea el valor, mejor será la señal. dB es la relación entre dos cantidades, que indica la magnitud relativa de las dos cantidades, mientras que dBm es el valor de la magnitud absoluta de la potencia.

En cuanto a las operaciones logarítmicas, si no las recuerdas, puedes revisarlas tú mismo.

Existen muchos tipos de redes, pero en China sólo es necesario conocer los tipos de red de los tres principales operadores nacionales.

Telecomunicaciones

2G CDMA

3G CDMA2000

4G TD-LTE, FDD-LTE

Móvil

2G GSM

3G TD-SCDMA

4G TD-LTE, FDD-LTE

China Unicom

2G GSM

3G WCDMA

4G TD-LTE, FDD-LTE

La API de Google ofrece 19 tipos, definidos en la clase TelephonyManager, de la siguiente manera: Pantalla

/** El tipo de red es desconocido*/

public static final int NETWORK_TYPE_UNKNOWN = 0;

/** La red actual es GPRS */

public static final int NETWORK_TYPE _GPRS = 1;

/** La red actual es EDGE */

public static final int NETWORK_TYPE_EDGE = 2;

/** La red actual es UMTS */

public static final int NETWORK_TYPE_UMTS = 3;

/** La red actual es CDMA: IS95A o IS95B */

public static final int NETWORK_TYPE_CDMA = 4;

/** La red actual es CDMA: La red actual es CDMA: IS95A o IS95B */

public static final int NETWORK_TYPE _CDMA = 4 ;

/** La red actual es EVDO versión 0*/

public static final int NETWORK_TYPE_EVDO_0 = 5;

/* * La red actual es EVDO versión A */

public static final int NETWORK_TYPE_EVDO_A = 6

/** La red actual es 1xRTT*/

public static final int NETWORK_ TYPE_1xRTT = 7;

/** La red actual es HSDPA */

public static final int NETWORK_TYPE_HSDPA = 8;

/** La red actual es HSUPA */

public static final int NETWORK_TYPE_HSPA = 9;

/** La red actual es HSPA */

public static final int NETWORK_TYPE_HSPA = 10;

Actual La red es HSPA.

p>/** La red actual es iDen */

public static final int NETWORK_TYPE_IDEN = 11;

/**La red actual es la versión EVDO B*/

public static final int NETWORK_TYPE_EVDO_B = 12;

/**La red actual es LTE */

public static final int NETWORK_TYPE_LTE = 13;

/** La red actual es eHRPD */

/** La red actual es eHRPD */

public static final int NETWORK_TYPE_EHRPD = 14;

/ ** La red actual es eHRPD HSPA+ */

public static final int NETWORK_TYPE_HSPAP = 15;

/** La red actual es GSM {@hide} */

/** La red actual para GSM {@hide}.

*/

public static final int NETWORK_TYPE_GSM = 16;

/** La red actual es TD_SCDMA {@hidden}*/

public static final int NETWORK_TYPE_TD_SCDMA = 17;

/** La red actual es IWLAN {@hide}*/

public static final int NETWORK_TYPE_IWLAN = 18;

Aquí hay algunos ejemplos para probar

Primero recuerda agregar permisos

Código de muestra

clase pública MainActivity extiende AppCompatActivity {

privado estático final int NETWORKTYPE_WIFI = 0;

privado static final int NETWORKTYPE_4G = 1;

privado static final int NETWORKTYPE_2G = 2;

privado static final int NETWORKTYPE_NONE = 3;

TextView público mTextView

p>

telephonyManager público mTelephonyManager;

PhoneStatListener público

/**

* Monitoreo de la intensidad de la señal de red;

*

* @param saveInstanceState

*/

@Override

protected void onCreate(Paquete saveInstanceState ) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_ main);

mTextView = (TextView) findViewById(R.id .textview);

// Obtener telephonyManager

mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

/Empezar a escuchar

mListener = new PhoneStatListener();

/Escuchando para

r intensidad de la señal

mTelephonyManager.listen(mListener, PhoneStatListener.LISTEN_SIGNAL_STRENGTHS);

}

@Override

protected void onResume () {

super.onResume();

mTelephonyManager.listen(mListener, PhoneStatListener.LISTEN_SIGNAL_STRENGTHS)listen(mListener, PhoneStatListener.LISTEN_SIGNAL_STRENGTHS);

} p>

@Override

protected void onResume(mListener, PhoneStatListener.LISTEN_SIGNAL_STRENGTHS);

}

@ Override

protected void onPause() {

super.onPause();

Dejar de escuchar cuando el usuario no esté en la página actual

mTelephonyManager.listen(mListener ,PhoneStatListener.LISTEN_NONE) ;

}

la clase privada PhoneStatListener extiende PhoneStateListener {

// Obtener intensidad de la señal

@ Override

public void onSignalStrengthsChanged(SignalStrength signalStrength) {

super.onSignalStrengthsChanged( signalStrength);

// Obtener la intensidad de la señal de la red

// Obtenga 5 del nivel de señal 0-4, cuanto mayor sea la señal, mejor, pero de ahora en adelante solo se puede usar api23

// int level = signalStrength.getLevel();

int gsmSignalStrength = signalStrength.getGsmSignalStrength() ;

//Obtener el tipo de red

int netWorkType = getNetWorkType(MainActivity.this);

cambiar (netWorkType ) {

case NETWORKTYPE_WIFI:

mTextView.setText("La red actual es wifi, la intensidad de la señal es: " + gsmSignalStrength);

break;

case NETWORKTYPE_2G:

mTextView.setText("La red actual es wifi, la intensidad de la señal es: " + gsmSignalStrength);

break;

caso NETWORKTYPE_2G:

mTextView.setText("La red actual

El trabajo es wifi, la intensidad de la señal es: " + gsmSignalStrength);

rotura; con respecto al proceso de adquisición de la señal, esto requiere un estudio en profundidad. Actualmente, la señal de la red solo se puede adquirir simplemente en la capa de aplicación .