web-dev-qa-db-ja.com

androidで現在インターネット接続が利用可能かどうかを確認する方法

アプリケーションもオフラインで実行したいので、現在インターネット接続が利用可能かどうかを確認する必要があります。アンドロイドでインターネットが利用可能かどうかを確認する方法を教えてもらえますか?サンプルコードを提供します。私は以下のコードを試し、エミュレータを使用して確認しましたが、機能していません

public  boolean isInternetConnection() 
{ 

    ConnectivityManager connectivityManager =  (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting(); 
} 

ありがとう

34
mohan

これにより、ネットワークに接続しているかどうかがわかります。

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;

警告:インターネットアクセスを含まない、またはブラウザーベースの認証を必要とするWiFiネットワークに接続している場合、connectedは引き続きtrueです。

マニフェストでこの許可が必要になります。

<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
63
binnyb

また、ユーザーがWi-Fiネットワークに接続することもありますが、そのネットワークにはブラウザーベースの認証が必要な場合があることに注意してください。ほとんどの空港とホテルのホットスポットはそのようなものであるため、アプリケーションは接続性があると思わせてしまい、URLフェッチは実際に探しているページではなくホットスポットのログインページを取得します。

このチェックの実行の重要性に応じて、ConnectivityManagerとの接続のチェックに加えて、単なる錯覚ではなく、機能しているインターネット接続であることをチェックするコードを含めることをお勧めします。 1x1 PNG画像や1バイトのテキストファイルなど、サイトから既知のアドレス/リソースを取得しようとすることで、これを行うことができます。

14
Bruno Oliveira

以下のコードを使用:

private boolean isNetworkAvailable() {
  ConnectivityManager connectivityManager 
      = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
  return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

isNetworkAvailable()trueを返す場合、インターネット接続が使用可能、そうでない場合はインターネット接続が使用不可

ここに以下を追加する必要がありますses-PermissionアプリケーションでManifestファイル

<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
9
sandeepmaaram

次の2つの方法を使用できます。

1-接続確認用:

   private boolean isNetworkConnected() {
        ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
        return cm.getActiveNetworkInfo() != null;
    }

2-インターネットの確認用:

  public boolean internetIsConnected() {
        try {
            String command = "ping -c 1 google.com";
            return (Runtime.getRuntime().exec(command).waitFor() == 0);
        } catch (Exception e) {
            return false;
        }
    }

マニフェストにアクセス許可を追加します。

 <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" />
5
Masoud Siahkali
public boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    } else {
        return false;
    }
}

Googleはこのコードブロックを推奨しています。これを使って。 Wi-Fiに接続していても、デバイスはインターネットに接続できないためです。 Wifiはインターネットに接続できません

2
Samir Elekberov

次のコードを使用します。

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;
    }
}

次の行をマニフェストに入れる必要があることを忘れないでください。

<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
2
user2009158

TCPリモートホストへの接続を確立しようとすることができます。

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;
  }
}

次に:

boolean online = hostAvailable("www.google.com", 80);
2
Xiv
  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;
        }
    }
1
Ahmed Sayed

メソッドcheckConnectivityを使用します。

  if (checkConnectivity()){
    //do something 

    }

接続を確認する方法:

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;
    }
1
Cristofer
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>
0
Hardip

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

また、AndroidManifest.xmlにアクセス許可を追加します

<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
0
Amol Desai

UseConnectivityManagerService

ソース リンク

...
...
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();
    }

}
0
Code Spy
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;
    }
}
0
Ahmed Sayed