package org.osmdroid.tileprovider.modules; import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Build; /** * A straightforward network check implementation. * * @author Marc Kurtz */ public class NetworkAvailabliltyCheck implements INetworkAvailablityCheck { private final ConnectivityManager mConnectionManager; private final boolean mIsX86; private final boolean mHasNetworkStatePermission; public NetworkAvailabliltyCheck(final Context aContext) { mConnectionManager = (ConnectivityManager) aContext .getSystemService(Context.CONNECTIVITY_SERVICE); mIsX86 = "Android-x86".equalsIgnoreCase(Build.BRAND); mHasNetworkStatePermission = aContext.getPackageManager() .checkPermission(Manifest.permission.ACCESS_NETWORK_STATE, aContext.getPackageName()) == PackageManager.PERMISSION_GRANTED; } @Override public boolean getNetworkAvailable() { if (!mHasNetworkStatePermission) { // if we're unable to check network state, assume we have a network return true; } final NetworkInfo networkInfo = mConnectionManager.getActiveNetworkInfo(); if (networkInfo == null) { return false; } if (networkInfo.isAvailable()) { return true; } return mIsX86 && networkInfo.getType() == ConnectivityManager.TYPE_ETHERNET; } @Override public boolean getWiFiNetworkAvailable() { if (!mHasNetworkStatePermission) { // if we're unable to check network state, assume we have a network return true; } final NetworkInfo wifi = mConnectionManager .getNetworkInfo(ConnectivityManager.TYPE_WIFI); return wifi != null && wifi.isAvailable(); } @Override public boolean getCellularDataNetworkAvailable() { if (!mHasNetworkStatePermission) { // if we're unable to check network state, assume we have a network return true; } final NetworkInfo mobile = mConnectionManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); return mobile != null && mobile.isAvailable(); } @Override public boolean getRouteToPathExists(final int hostAddress) { // TODO check for CHANGE_NETWORK_STATE permission return mConnectionManager.requestRouteToHost(ConnectivityManager.TYPE_WIFI, hostAddress) || mConnectionManager.requestRouteToHost(ConnectivityManager.TYPE_MOBILE, hostAddress); } }