Je souhaite également exécuter mon application hors connexion. Je dois donc vérifier si une connexion Internet est actuellement disponible ou non. Quelqu'un peut-il me dire comment vérifier si Internet est disponible ou non dans Android? Donnez un exemple de code. J'ai essayé avec le code ci-dessous et vérifié en utilisant un émulateur mais ça ne fonctionne pas
public boolean isInternetConnection()
{
ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
}
Merci
Cela vous dira si vous êtes connecté à un réseau:
boolean connected = false;
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
//we are connected to a network
connected = true;
}
else
connected = false;
Avertissement: Si vous êtes connecté à un réseau WiFi ne disposant pas d'un accès à Internet ou nécessitant une authentification basée sur un navigateur, connected
sera toujours vrai.
Vous aurez besoin de cette permission dans votre manifeste:
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
Sachez également que, parfois, l'utilisateur sera connecté à un réseau Wi-Fi, mais que ce réseau peut nécessiter une authentification basée sur un navigateur. C'est ce qui se passe dans la plupart des points chauds d'aéroports et d'hôtels, de sorte que votre application risque de croire que vous disposez d'une connectivité. Ainsi, toute récupération d'URL récupérera la page de connexion du point d'accès au lieu de la page recherchée.
En fonction de l'importance de cette vérification, en plus de vérifier la connexion avec ConnectivityManager, je suggérerais d'inclure du code pour vérifier qu'il s'agit d'une connexion Internet opérationnelle et non d'une illusion. Vous pouvez le faire en essayant de récupérer une adresse/ressource connue sur votre site, telle qu'une image PNG 1x1 ou un fichier texte à 1 octet.
Utiliser le code ci-dessous:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
si isNetworkAvailable () renvoie true
, une connexion Internet est disponible, sinon la connexion Internet n'est pas disponible.
Ici besoin d'ajouter ci-dessous utilise-Permission dans votre application Manifeste fichier
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
Vous pouvez utiliser deux méthodes:
1 - pour vérifier la connexion:
private boolean isNetworkConnected() {
ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo() != null;
}
2 - pour chèque internet:
public boolean internetIsConnected() {
try {
String command = "ping -c 1 google.com";
return (Runtime.getRuntime().exec(command).waitFor() == 0);
} catch (Exception e) {
return false;
}
}
Ajouter des autorisations pour manifester:
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
Vous pouvez simplement essayer d’établir une connexion TCP à un hôte distant:
public boolean hostAvailable(String Host, int port) {
try (Socket socket = new Socket()) {
socket.connect(new InetSocketAddress(Host, port), 2000);
return true;
} catch (IOException e) {
// Either we have a timeout or unreachable Host or failed DNS lookup
System.out.println(e);
return false;
}
}
Ensuite:
boolean online = hostAvailable("www.google.com", 80);
utilisez le code suivant:
public static boolean isNetworkAvaliable(Context ctx) {
ConnectivityManager connectivityManager = (ConnectivityManager) ctx
.getSystemService(Context.CONNECTIVITY_SERVICE);
if ((connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null && connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED)
|| (connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.getState() == NetworkInfo.State.CONNECTED)) {
return true;
} else {
return false;
}
}
n'oubliez pas que vous devez indiquer dans votre manifeste la ligne suivante:
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
public boolean isInternetConnection()
{
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
//we are connected to a network
return true;
}
else {
return false;
}
}
Utilisez la méthode checkConnectivity:
if (checkConnectivity()){
//do something
}
Méthode pour vérifier votre connectivité:
private boolean checkConnectivity() {
boolean enabled = true;
ConnectivityManager connectivityManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivityManager.getActiveNetworkInfo();
if ((info == null || !info.isConnected() || !info.isAvailable())) {
Toast.makeText(getApplicationContext(), "Sin conexión a Internet...", Toast.LENGTH_SHORT).show();
return false;
} else {
return true;
}
return false;
}
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
} else {
return false;
}
}
Utilisez ceci. Parce que l'appareil peut ne pas être connecté à Internet même s'il est connecté au wifi. Wifi peut être pas connecté à Internet
package com.base64;
import Android.content.Context;
import Android.graphics.Bitmap;
import Android.graphics.BitmapFactory;
import Android.net.ConnectivityManager;
import Android.net.NetworkInfo;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.util.Base64;
import Android.widget.ImageView;
import Android.widget.Toast;
import com.androidquery.AQuery;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(isConnectingToInternet(MainActivity.this))
{
Toast.makeText(getApplicationContext(),"internet is available",Toast.LENGTH_LONG).show();
}
else {
System.out.print("internet is not available");
}
}
public static boolean isConnectingToInternet(Context context)
{
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;
}
}
/* manifest */
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.base64">
<uses-permission Android:name="Android.permission.INTERNET"/>
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE"/>
<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">
<activity Android:name=".MainActivity">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
essayez d'utiliser ConnectivityManager
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
Ajoutez également l'autorisation à AndroidManifest.xml
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
Utiliser le service ConnectivityManager
Source Lien
...
...
import Android.net.ConnectivityManager;
....
....
public class Utils {
static ConnectivityManager connectivityManager;
....
....
public static String isOnline(Context context) {
JSONArray array = new JSONArray();
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("connected","false");
} catch (JSONException e) {
e.printStackTrace();
}
try {
connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
Log.i("networkInfo", networkInfo.toString());
jsonObject.put("connected",(networkInfo != null && networkInfo.isAvailable() &&
networkInfo.isConnected()));
jsonObject.put("isAvailable",(networkInfo.isAvailable()));
jsonObject.put("isConnected",(networkInfo.isConnected()));
jsonObject.put("typeName",(networkInfo.getTypeName()));
array.put(jsonObject);
return array.toString();
} catch (Exception e) {
System.out.println("CheckConnectivity Exception: " + e.getMessage());
Log.v("connectivity", e.toString());
}
array.put(jsonObject);
return array.toString();
}
}
public static boolean isInternetConnection(Context mContext)
{
ConnectivityManager connectivityManager = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
//we are connected to a network
return true;
}
else {
return false;
}
}