J'ai un code dans mon application qui détecte si le Wi-Fi est activement connecté. Ce code déclenche une RuntimeException si le mode avion est activé. Je voudrais quand même afficher un message d'erreur séparé dans ce mode. Comment puis-je détecter de manière fiable si un appareil Android est en mode avion?
92
Réponses:
la source
Settings.Global
.android.intent.action.AIRPLANE_MODE
, car le changement de mode prend du temps. VérifiezIntent.ACTION_AIRPLANE_MODE_CHANGED
si vous voulez faire cela.En étendant la réponse d'Alex pour inclure la vérification de la version du SDK, nous avons:
la source
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
avant la méthode.Et si vous ne voulez pas interroger si le mode avion est actif ou non, vous pouvez enregistrer un BroadcastReceiver pour l'intention SERVICE_STATE et y réagir.
Soit dans votre ApplicationManifest (pré-Android 8.0):
ou par programmation (toutes les versions d'Android):
Et comme décrit dans les autres solutions, vous pouvez interroger le mode avion lorsque votre récepteur a été notifié et lever votre exception.
la source
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
/<action android:name="android.intent.action.AIRPLANE_MODE" />
boolean isPlaneModeOn = intent.getBooleanExtra("state", false);
Le booléenisPlaneModeOn
seratrue
si l'utilisateur a activé le mode avion oufalse
s'il est désactivéLors de l'enregistrement du mode avion
BroadcastReceiver
(réponse @saxos), je pense qu'il est très judicieux d'obtenir l'état du paramètre Mode avion immédiatementIntent Extras
pour éviter d'appelerSettings.Global
ouSettings.System
:la source
D' ici :
la source
afin de se débarrasser de la plainte de dépréciation (lorsque vous ciblez l'API17 + et ne vous souciez pas trop de la compatibilité descendante), il faut comparer avec
Settings.Global.AIRPLANE_MODE_ON
:lorsque vous envisagez une API inférieure:
la source
Dans Oreo, veuillez ne pas utiliser le mode avion broadCastReceiver. c'est une intention implicite. il a été supprimé. Voici la liste actuelle des exceptions . il n'est pas actuellement sur la liste et ne devrait donc pas recevoir de données. Considérez-le comme mort.
comme indiqué par un autre utilisateur ci-dessus, utilisez le code suivant:
la source
Récepteur de diffusion statique
Code manifeste:
Code Java: fichier java Broadcast Receiver
OU
Récepteur de diffusion dynamique
Code Java: fichier java d'activité
Enregistrez le récepteur de diffusion sur l'application ouverte pas besoin d'ajouter du code dans le manifeste si vous n'effectuez une action que lorsque votre activité est ouverte, comme vérifier que le mode avion est activé ou désactivé lorsque vous accédez à Internet, etc.
Code Java: fichier java Broadcast Receiver
la source
À partir du niveau API - 17
la source
J'ai écrit ce cours qui pourrait être utile. Il ne renvoie pas directement un booléen pour vous dire si le mode avion est activé ou désactivé, mais il vous avertit lorsque le mode avion est changé de l'un à l'autre.
Usage
la source
Voici la seule chose qui a fonctionné pour moi (API 27):
Où
br
est votre BroadcastReceiver. Je crois que les changements récents dans l' autorisation maintenant à la foisConnectivityManager.CONNECTIVITY_ACTION
etIntent.ACTION_AIRPLANE_MODE_CHANGED
sont nécessaires.la source
Depuis Jelly Bean (Build Code 17), ce champ a été déplacé vers les paramètres globaux. Ainsi, pour obtenir la meilleure compatibilité et robustesse, nous devons prendre en charge les deux cas. L'exemple suivant est écrit en Kotlin.
Il s'agit de la version ci-dessus du code précédent.
la source
Vous pouvez vérifier si Internet est activé
}
la source