103 votes

Comment détecter le mode avion sur Android?

J'ai dans mon application un code qui détecte si le Wi-Fi est activement connecté. Ce code déclenche une exception RuntimeException si le mode avion est activé. Je voudrais quand même afficher un message d'erreur séparé lorsque vous êtes dans ce mode. Comment puis-je détecter de manière fiable si un appareil Android est en mode avion?

151voto

Alex Volovoy Points 34562
/**
* Gets the state of Airplane Mode.
* 
* @param context
* @return true if enabled.
*/
private static boolean isAirplaneModeOn(Context context) {

   return Settings.System.getInt(context.getContentResolver(),
           Settings.System.AIRPLANE_MODE_ON, 0) != 0;

}

102voto

Tiago Points 1478

En élargissant la réponse d'Alex pour inclure la vérification de version du SDK, nous avons:

 /**
 * Gets the state of Airplane Mode.
 * 
 * @param context
 * @return true if enabled.
 */
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public static boolean isAirplaneModeOn(Context context) {        
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
        return Settings.System.getInt(context.getContentResolver(), 
                Settings.System.AIRPLANE_MODE_ON, 0) != 0;          
    } else {
        return Settings.Global.getInt(context.getContentResolver(), 
                Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
    }       
}
 

55voto

saxos Points 1494

Et si vous ne souhaitez 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:

 <receiver android:enabled="true" android:name=".ConnectivityReceiver">
    <intent-filter>
        <action android:name="android.intent.action.SERVICE_STATE"/>
    </intent-filter>
</receiver>
 

ou par programme:

 IntentFilter intentFilter = new IntentFilter("android.intent.action.SERVICE_STATE");

BroadcastReceiver receiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
            Log.d("AirplaneMode", "Service state changed");
      }
}

context.registerReceiver(receiver, intentFilter);
 

Et comme décrit dans les autres solutions, vous pouvez interroger le mode avion lorsque votre récepteur est prévenu et lancer votre exception.

7voto

Preet Sangha Points 39414

À partir d' ici :

  public static boolean isAirplaneModeOn(Context context){
   return Settings.System.getInt(context.getContentResolver
                        (),Settings.System.AIRPLANE_MODE_ON, 0) != 0;
 }
 

-5voto

MoschDev Points 94

Vous pouvez vérifier si Internet est allumé

 public class ConnectionDetector {

private Context _context;

public ConnectionDetector(Context context){
    this._context = context;
}

public boolean isConnectingToInternet(){
    ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
      if (connectivity != null)
      {
          NetworkInfo[] info = connectivity.getAllNetworkInfo();
          if (info != null)
              for (int i = 0; i < info.length; i++)
                  if (info[i].getState() == NetworkInfo.State.CONNECTED)
                  {
                      return true;
                  }

      }
      return false;
}
 

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X