簡體   English   中英

如何檢查Android手機未連接到互聯網?

[英]How to check that android phone is not connected to internet?

我正在 android 中開發一個從數據庫中獲取數據的應用程序。 我開發了代碼來查找 WIFI 或移動數據是打開還是關閉,如下所示:

protected boolean isNetworkAvailable()
{
    boolean connection=true;
    ConnectivityManager connectivityManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] activeNetworkInfo=connectivityManager.getAllNetworkInfo();
    for(NetworkInfo ni:activeNetworkInfo)
    {
        if(ni.getTypeName().equalsIgnoreCase("WIFI"))
            if(ni.isConnected())    
                haveConnectedWifi=true;
        if(ni.getTypeName().equalsIgnoreCase("MOBILE"))
            if(ni.isConnected())
                haveConnectedMobile=true;

    }
    if(haveConnectedWifi==false && haveConnectedMobile==false)
    {

    connection=false;
    }
        return connection;

    }

現在假設我的 WIFI 或移動數據網絡已打開,但我根本沒有連接到互聯網(WIFI 沒有連接到任何接入點)。我如何在 android 中顯示它?

謝謝,

你可以簡單地使用這個:

public boolean isNetworkAvailable() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();
    // if no network is available networkInfo will be null
    // otherwise check if we are connected
    if (networkInfo != null && networkInfo.isConnected()) {
        return true;
    }
    return false;
}

這門課非常完整:

public class ConnexionDetector extends BroadcastReceiver {
    /**
     * ATTRIBUTES
     */
    private Context         _context;
    private boolean         _noConnectivity;
    private String          _reason;
    private boolean         _isFailover;
    private static boolean  _isConnected        = false;
    private static boolean  _isConnectivityGood = true;

    public ConnexionDetector(Context context) {

        this._context = context;
    }

public void registerReceivers() {

    _context.registerReceiver(this, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}

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

public static NetworkInfo getNetworkInfo(Context context) {

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

public static boolean isConnected(Context context) {

    NetworkInfo info = getNetworkInfo(context);
    return (info != null && info.isConnected());
}

public static boolean isConnectedWifi(Context context) {

    NetworkInfo info = getNetworkInfo(context);
    return (info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_WIFI);
}

public static boolean isConnectedMobile(Context context) {

    NetworkInfo info = getNetworkInfo(context);
    return (info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_MOBILE);
}

public static boolean isConnectedFast(Context context) {

    NetworkInfo info = getNetworkInfo(context);
    return (info != null && info.isConnected() && isConnectionFast(info.getType(), info.getSubtype()));
}

private static boolean isConnectionFast(int type, int subType) {

    if (type == ConnectivityManager.TYPE_WIFI) {
        return true;
    }
    else if (type == ConnectivityManager.TYPE_MOBILE) {
        switch (subType) {
            case TelephonyManager.NETWORK_TYPE_1xRTT:
                return false; // ~ 50-100 kbps
            case TelephonyManager.NETWORK_TYPE_CDMA:
                return false; // ~ 14-64 kbps
            case TelephonyManager.NETWORK_TYPE_EDGE:
                return false; // ~ 50-100 kbps
            case TelephonyManager.NETWORK_TYPE_EVDO_0:
                return true; // ~ 400-1000 kbps
            case TelephonyManager.NETWORK_TYPE_EVDO_A:
                return true; // ~ 600-1400 kbps
            case TelephonyManager.NETWORK_TYPE_GPRS:
                return false; // ~ 100 kbps
            case TelephonyManager.NETWORK_TYPE_HSDPA:
                return true; // ~ 2-14 Mbps
            case TelephonyManager.NETWORK_TYPE_HSPA:
                return true; // ~ 700-1700 kbps
            case TelephonyManager.NETWORK_TYPE_HSUPA:
                return true; // ~ 1-23 Mbps
            case TelephonyManager.NETWORK_TYPE_UMTS:
                return true; // ~ 400-7000 kbps
            case TelephonyManager.NETWORK_TYPE_UNKNOWN:
            default:
                return false;
        }
    }
    else {
        return false;
    }
}

@Override
public void onReceive(Context context, Intent intent) {

    _noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
    _reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
    _isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);
    //
    if (_noConnectivity) {
        _isConnected = false;
    }
    else {
        if (isConnectedFast(_context)) {
            _isConnectivityGood = true;
        }
        else {
            _isConnectivityGood = false;
        }
        _isConnected = true;
    }
}
}

試試這個,

ConnectivityManager connec = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE);
        try {
            android.net.NetworkInfo wifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        android.net.NetworkInfo mobile = connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if (wifi.isConnected()||mobile.isConnected())  
            return true;
        else if (wifi.isConnected() && mobile.isConnected())  
            return true;
        else  
            return false;

    } catch (NullPointerException e) {
        Log.d("ConStatus", "No Active Connection");
        return false;
    }

此代碼可能對您有所幫助。

ConnectivityManager cn= (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);


    NetworkInfo networkInfo = cn.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    testwifi=networkInfo.isConnected();
    if(!testwifi)
        tv1.setText("wifi is off");
    else
        tv1.setText("wifi is on");

試試這個:

public static void isNetworkAvailable(Context context){
    HttpGet httpGet = new HttpGet("http://www.google.com");
    HttpParams httpParameters = new BasicHttpParams();
    // Set the timeout in milliseconds until a connection is established.
    // The default value is zero, that means the timeout is not used.
    int timeoutConnection = 3000;
    HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
    // Set the default socket timeout (SO_TIMEOUT)
    // in milliseconds which is the timeout for waiting for data.
    int timeoutSocket = 5000;
    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

    DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
    try{
        Log.d(TAG, "Checking network connection...");
        httpClient.execute(httpGet);
        Log.d(TAG, "Connection OK");
        return;
    }
    catch(ClientProtocolException e){
        e.printStackTrace();
    }
    catch(IOException e){
        e.printStackTrace();
    }

    Log.d(TAG, "Connection unavailable");
}

來源: 檢查活動的互聯網連接 Android

調用這個類的 isConnectingToInternet 函數來檢查你想要檢查互聯網連接的互聯網連接。

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class ConnectionDetector {

private Context _context;

public ConnectionDetector(Context context) {
    this._context = context;
}

/**
 * Checking for all possible internet providers
 * **/
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;
}
}

確保實際互聯網可用或不需要 ping 任何全球網址,例如www.google.com

這將工作 100%

public static boolean isNetwokReachable() {
        final ConnectivityManager connMgr = (ConnectivityManager) mSmartAndroidActivity.getSystemService(Context.CONNECTIVITY_SERVICE);
        final NetworkInfo netInfo = connMgr.getActiveNetworkInfo();

        if (netInfo != null && netInfo.isConnected()) {
            try {
                URL url = new URL("http://www.google.com");
                HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
                urlc.setRequestProperty("User-Agent", "Android Application");
                urlc.setRequestProperty("Connection", "close");
                urlc.setConnectTimeout(10 * 1000);
                urlc.connect();
                if (urlc.getResponseCode() == 200) {
                    return true;
                } else {
                    return false;
                }
            } catch (Throwable e) {
                return false;
            }
        } else {
            return false;
        }
    }

我也在搜索這個問題的答案,然后我在我的代碼中這樣做並且它有效。 不知道好不好如果有什么問題,請告訴我。

步驟: 1 創建一個BaseActivity並擴展AppCompatActivity並在其中編寫代碼以進行網絡檢查並在沒有網絡連接時向用戶顯示消息:

import android.content.Context
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkRequest
import android.os.Bundle
import android.util.Log
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.snackbar.Snackbar

open class BaseActivity : AppCompatActivity() {

    private var cManager: ConnectivityManager? = null
    private var mCallback: ConnectivityManager.NetworkCallback? = null
    private var request : NetworkRequest? = null
    private var view: View? = null
    private var mSnackBar: Snackbar? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        cManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        request = NetworkRequest.Builder().build()

        // get root view where we want to show message
        view = window.decorView.rootView

        mCallback = object : ConnectivityManager.NetworkCallback() {
            override fun onLost(network: Network) {
                super.onLost(network)

                mSnackBar = Snackbar.make(view!!, "No Network connection", Snackbar.LENGTH_LONG)
                mSnackBar!!.duration = Snackbar.LENGTH_INDEFINITE
                mSnackBar!!.show()
            }

            override fun onAvailable(network: Network) {
                super.onAvailable(network)
                if (mSnackBar != null){
                    mSnackBar!!.dismiss()
                }
            }
        }
        cManager!!.registerNetworkCallback(request!!, mCallback!!)
    }
    override fun onStop() {
        super.onStop()
        cManager!!.unregisterNetworkCallback(mCallback!!)    
    }
}

第2步:

現在在MainActivity類中,擴展此BaseActivity類。

class MainActivity : BaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

    }
}

第 3 步:不要忘記在AndroidManifest文件中添加它

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

現在運行並檢查您的應用程序。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM