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?
Réponses
Trop de publicités?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;
}
}
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.
À partir d' ici :
public static boolean isAirplaneModeOn(Context context){
return Settings.System.getInt(context.getContentResolver
(),Settings.System.AIRPLANE_MODE_ON, 0) != 0;
}
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;
}
}