Tengo un código en mi aplicación que detecta si Wi-Fi está conectado activamente. Ese código activa una RuntimeException si el modo avión está habilitado. De todos modos, me gustaría mostrar un mensaje de error por separado cuando esté en este modo. ¿Cómo puedo detectar de manera confiable si un dispositivo Android está en modo avión?
92
Respuestas:
fuente
Settings.Global
.android.intent.action.AIRPLANE_MODE
, ya que el cambio de modo tarda en completarse. VerifiqueIntent.ACTION_AIRPLANE_MODE_CHANGED
si quiere hacer eso.Al extender la respuesta de Alex para incluir la verificación de la versión del SDK, tenemos:
fuente
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
antes del método.Y si no desea sondear si el Modo Avión está activo o no, puede registrar un BroadcastReceiver para SERVICE_STATE Intent y reaccionar al respecto.
O en su ApplicationManifest (pre-Android 8.0):
o programáticamente (todas las versiones de Android):
Y como se describe en las otras soluciones, puede sondear el modo avión cuando se notifique a su receptor y lanzar su excepción.
fuente
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
/<action android:name="android.intent.action.AIRPLANE_MODE" />
boolean isPlaneModeOn = intent.getBooleanExtra("state", false);
El booleanoisPlaneModeOn
serátrue
si el usuario ha activado el modo avión ofalse
si está desactivadoAl registrar el modo avión
BroadcastReceiver
(respuesta de @saxos), creo que tiene mucho sentido obtener el estado de la configuración del modo avión de inmediatoIntent Extras
para evitar llamadasSettings.Global
oSettings.System
:fuente
Desde aqui :
fuente
Para deshacerse de la queja de depreciación (cuando se apunta a API17 + y no se preocupa demasiado por la compatibilidad con versiones anteriores), uno tiene que comparar con
Settings.Global.AIRPLANE_MODE_ON
:al considerar una API más baja:
fuente
En Oreo, no utilice el modo avión broadCastReceiver. es una intención implícita. ha sido eliminado. Aquí está la lista de excepciones actual . no está actualmente en la lista, por lo que no debería recibir datos. Considérelo muerto.
como lo indicó otro usuario arriba, use el siguiente código:
fuente
Receptor de transmisión estática
Código manifiesto:
Código Java: archivo java de Broadcast Receiver
O
Receptor de transmisión dinámica
Código Java: archivo Java de actividad
Registre el receptor de transmisión en la aplicación abierta sin necesidad de agregar código en el manifiesto si realiza una acción solo cuando su actividad se abre, como verificar que el modo de avión está encendido o apagado cuando accede a Internet, etc.
Código Java: archivo java de Broadcast Receiver
fuente
Desde el nivel API - 17
fuente
Escribí esta clase que podría ser útil. No devuelve directamente un booleano para indicarle si el modo avión está habilitado o deshabilitado, pero le notificará cuando el modo avión cambie de uno a otro.
Uso
fuente
Esto es lo único que funcionó para mí (API 27):
¿Dónde
br
está su BroadcastReceiver? Creo que con los cambios recientes en el permiso ahora se necesitan ambosConnectivityManager.CONNECTIVITY_ACTION
yIntent.ACTION_AIRPLANE_MODE_CHANGED
.fuente
Desde Jelly Bean (código de compilación 17), este campo se ha movido a la configuración global. Así, para conseguir la mejor compatibilidad y robustez tenemos que ocuparnos de ambos casos. El siguiente ejemplo está escrito en Kotlin.
Esta es la versión anterior del código anterior.
fuente
Puede comprobar si Internet está encendido
}
fuente