簡體   English   中英

如何在 API 級別 21 以下的設備中檢查 NO INTERNET

[英]how to check for NO INTERNET in devices below API level 21

這是我的 MainActivity,我已經在 onstart 中注冊了我的網絡調用。 在此代碼中,無論設備是否打開互聯網 wifi,都不會調用onUnavailable() 我想在單擊按鈕后檢查互聯網,如果連接了互聯網,它將繼續進行下一個活動,否則沒有

public class MainActivity extends AppCompatActivity {
    private TextView textView;
    ConnectivityManager.NetworkCallback networkCallback;
    ConnectivityManager manager;
    public static final String TAG = "bantai";
    private NetworkRequest networkRequest;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.internetTextview);
        networkRequest = new NetworkRequest.Builder().build();
        manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);


        networkCallback = new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(@NonNull Network network) {
                super.onAvailable(network);
                Log.d(TAG, "onAvailable: ");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
                        textView.setText("onAvailable");
                    }
                });

            }

            @Override
            public void onLosing(@NonNull Network network, int maxMsToLive) {
                super.onLosing(network, maxMsToLive);
                Log.d(TAG, "onLosing: ");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
                        textView.setText("loosing");
                    }
                });
            }

            @Override
            public void onLost(@NonNull Network network) {
                super.onLost(network);
                Log.d(TAG, "onLost: ");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
                        textView.setText("lost");
                    }
                });            }

            @Override
            public void onUnavailable() {
                super.onUnavailable();
                Log.d(TAG, "onUnavailable: ");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
                        textView.setText("unavailable");
                    }
                });            }

            @Override
            public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {
                super.onCapabilitiesChanged(network, networkCapabilities);
                Log.d(TAG, "onCapabilitiesChanged: ");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
                        textView.setText("capability");
                    }
                });            }

            @Override
            public void onLinkPropertiesChanged(@NonNull Network network, @NonNull LinkProperties linkProperties) {
                super.onLinkPropertiesChanged(network, linkProperties);
                Log.d(TAG, "onLinkPropertiesChanged: ");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
                        textView.setText("link");
                    }
                });            }

            @Override
            public void onBlockedStatusChanged(@NonNull Network network, boolean blocked) {
                super.onBlockedStatusChanged(network, blocked);
                Log.d(TAG, "onBlockedStatusChanged: ");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Log.d(TAG, "onAvailable: "+ Thread.currentThread().getName());
                        textView.setText("blocked");
                    }
                });            }
        };
    }

    @Override
    protected void onStart() {
        super.onStart();
        manager.requestNetwork(networkRequest,networkCallback);

    }

    @Override
    protected void onStop() {
        super.onStop();
        manager.unregisterNetworkCallback(networkCallback);
    }

另外ConnectivityManager.requestNetwork(networkRequest, networkCallback, 3000)此命令需要 Api 級別 21 + 超時 3 秒。

為了輕松檢查互聯網,請使用此 function,它在 api 16 及更高版本上響應:

在 AndroidManifest.xml 添加:

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

現在檢查網絡狀態:

  • getActiveNetworkInfo 在 API 29 上已棄用。

  • getAllNetworkInfo 在 API 23 上已棄用。

     fun isConnected(): Boolean { val hasInternet: Boolean val connectivityManager = ctx.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { val networkCapabilities = connectivityManager.activeNetwork?: return false val actNw = connectivityManager.getNetworkCapabilities(networkCapabilities)?: return false hasInternet = when { actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true else -> false } } else { hasInternet = try { if (connectivityManager.activeNetworkInfo == null) { false } else { connectivityManager.activeNetworkInfo?.isConnected:! } } catch (e: Exception) { false } } return hasInternet}

暫無
暫無

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

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