Ich habe Code in meiner Anwendung, der erkennt, ob Wi-Fi aktiv verbunden ist. Dieser Code löst eine RuntimeException aus, wenn der Flugzeugmodus aktiviert ist. In diesem Modus möchte ich ohnehin eine separate Fehlermeldung anzeigen. Wie kann ich zuverlässig erkennen, ob sich ein Android-Gerät im Flugzeugmodus befindet?
92
Antworten:
quelle
Settings.Global
.android.intent.action.AIRPLANE_MODE
, da der Moduswechsel einige Zeit in Anspruch nimmt. PrüfenIntent.ACTION_AIRPLANE_MODE_CHANGED
Sie, ob Sie das tun möchten.Durch die Erweiterung von Alex 'Antwort um die Überprüfung der SDK-Version haben wir:
quelle
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
vor der Methode hinzufügen .Und wenn Sie nicht abfragen möchten, ob der Flugzeugmodus aktiv ist oder nicht, können Sie einen BroadcastReceiver für die Absicht SERVICE_STATE registrieren und darauf reagieren.
Entweder in Ihrem ApplicationManifest (vor Android 8.0):
oder programmgesteuert (alle Android-Versionen):
Und wie in den anderen Lösungen beschrieben, können Sie den Flugzeugmodus abfragen, wenn Ihr Empfänger benachrichtigt wurde, und Ihre Ausnahme auslösen.
quelle
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
/<action android:name="android.intent.action.AIRPLANE_MODE" />
boolean isPlaneModeOn = intent.getBooleanExtra("state", false);
Der booleanisPlaneModeOn
wird ,true
wenn der Benutzer auf der Ebene Modus eingeschaltet ist oderfalse
wenn es ausgeschaltet istBei der Registrierung des Flugzeugmodus
BroadcastReceiver
(Antwort von @saxos) halte ich es für sehr sinnvoll, den Status der Einstellung für den Flugzeugmodus sofort zu ändernIntent Extras
, um einen Anruf zu vermeidenSettings.Global
oderSettings.System
:quelle
Von hier aus :
quelle
Um die Abschreibungsbeschwerde loszuwerden (wenn Sie auf API17 + abzielen und sich nicht zu sehr um die Abwärtskompatibilität kümmern), müssen Sie Folgendes vergleichen
Settings.Global.AIRPLANE_MODE_ON
:wenn Sie eine niedrigere API in Betracht ziehen:
quelle
Verwenden Sie in Oreo bitte nicht den Flugzeugmodus BroadCastReceiver. es ist eine implizite Absicht. es wurde entfernt. Hier ist die aktuelle Ausnahmeliste . Es ist derzeit nicht auf der Liste und sollte daher keine Daten empfangen. Betrachten Sie es als tot.
Verwenden Sie, wie oben von einem anderen Benutzer angegeben, den folgenden Code:
quelle
Statischer Rundfunkempfänger
Manifest-Code:
Java-Code: Java-Datei des Broadcast Receivers
ODER
Dynamischer Rundfunkempfänger
Java-Code: Aktivitäts-Java-Datei
Registrieren Sie den Rundfunkempfänger bei geöffneter Anwendung. Sie müssen keinen Code im Manifest hinzufügen, wenn Sie nur dann eine Aktion ausführen, wenn Ihre Aktivität geöffnet ist. Überprüfen Sie, ob der Flugzeugmodus aktiviert oder deaktiviert ist, wenn Sie auf das Internet zugreifen
Java-Code: Java-Datei des Broadcast Receivers
quelle
Ab API-Ebene - 17
quelle
Ich habe diese Klasse geschrieben, die hilfreich sein könnte. Es wird kein Boolescher Wert direkt zurückgegeben, der angibt, ob der Flugzeugmodus aktiviert oder deaktiviert ist. Es werden Sie jedoch benachrichtigt, wenn der Flugzeugmodus von einem zum anderen geändert wird.
Verwendung
quelle
Hier ist das einzige, was für mich funktioniert hat (API 27):
Wo
br
ist Ihr BroadcastReceiver? Ich glaube, dass mit den jüngsten Änderungen in der Erlaubnis jetzt beideConnectivityManager.CONNECTIVITY_ACTION
undIntent.ACTION_AIRPLANE_MODE_CHANGED
notwendig sind.quelle
Seit Jelly Bean (Build Code 17) wurde dieses Feld in die globalen Einstellungen verschoben. Um die beste Kompatibilität und Robustheit zu erzielen, müssen wir uns also um beide Fälle kümmern. Das folgende Beispiel ist in Kotlin geschrieben.
Dies ist die obige Jelly Bean-Version des vorherigen Codes.
quelle
Sie können überprüfen, ob das Internet aktiviert ist
}}
quelle