エミュレーターでテストするアプリケーションで、次のコードを使用してネットワーク接続(WIFI)を確認します。
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
このメソッドは、コンピューターのワイヤレス接続を無効にしても、常にtrue
を返します...これはエミュレーターが原因ですか、それとも何か他のものですか?
これがネットワーク接続を確認する正しい方法ではない場合、どうすれば確認できますか?
(1)すべてのアクティビティがこの関数を呼び出すことができるようにコンテキストで渡すこと、および(2)この関数を静的にすることをお勧めします。
public boolean isNetworkOnline() {
boolean status=false;
try{
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getNetworkInfo(0);
if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) {
status= true;
}else {
netInfo = cm.getNetworkInfo(1);
if(netInfo!=null && netInfo.getState()==NetworkInfo.State.CONNECTED)
status= true;
}
}catch(Exception e){
e.printStackTrace();
return false;
}
return status;
}
GetActiveNetworkInfo()を機能させるには、以下をマニフェストに追加する必要があります。
1. uses-permission Android:name="Android.permission.INTERNET"
2. uses-permission
Android:name="Android.permission.ACCESS_NETWORK_STATE"
netInfo.isConnectedOrConnectingよりもnetInfo.isConnected()を使用する方が良い
そしてまたこれを試してください
Context.getSystemService(Context.CONNECTIVITY_SERVICE).getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
または
Context.getSystemService(Context.CONNECTIVITY_SERVICE).requestRouteToHost(TYPE_WIFI, int hostAddress)
以下の機能でインターネット接続の接続状態を確認できます。 Google Androidは、Android APIの機能を更新して、ネットワークの状態をチェックします。現在Android最新のAPI、getAllNetworkInfo()
は非推奨ですが、getAllNetworks()
関数はBuild.VERSION.SDK_INT >= 21.I
に対してのみ許可されています。
インターネット接続を確認するには、この関数を呼び出します。
public static boolean checkInternetConnection(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
return false;
} else if(Build.VERSION.SDK_INT >= 21){
Network[] info = connectivity.getAllNetworks();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i] != null && connectivity.getNetworkInfo(info[i]).isConnected()) {
return true;
}
}
}
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
final NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnected()) {
return true;
}
}
return false;
}
以下のクラス を使用し、最新のAndroid利用可能なバージョンに更新:Android 10。