show code block

2017年3月1日 星期三

檢查是否有網路連線 - Connectivity Network

前言:



影片中的Dialog請參考朝狀結構篇:
http://nikeru8.blogspot.tw/2016/07/androiddialog-button.html

影片中WebView:
http://nikeru8.blogspot.tw/2017/03/android.html

如果你在App內有崁入WebView,當沒有網路的情況下,會讓畫面變得很醜。

此時你可以先檢查是否有網路,在執行webView。



重點程式碼:

 
ConnectivityManager mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();





上面這兩行的作用有點像是FindViewById,指定元件。
ConnectivityManager 獲取Service內的資訊
NetworkInfo 在ConnectivityManager內獲取關於網路的資訊

之後就可以在NetworkInfo內調用你想要查詢的方法。
可以去看官方文檔案內的Public mothed:https://developer.android.com/reference/android/net/NetworkInfo.html

在這列出幾個比較常用的

            //網路是否已連線
            mNetworkInfo.isConnected();
       
            //網路連線方式名稱
            mNetworkInfo.getTypeName();
            //網路狀態
            mNetworkInfo.getState();
         
            //網路是否可使用
            mNetworkInfo.isAvailable();
       
            //網路是否已連接or連線中
            mNetworkInfo.isConnectedOrConnecting();
         
            //網路失敗回報
            mNetworkInfo.isFailover();
     
            //網路是否在漫遊模式
            mNetworkInfo.isRoaming();
         
            //網路詳細狀態
            mNetworkInfo.getDetailedState();
       
            //網路狀態詳細資訊
            mNetworkInfo.getExtraInfo();
     
            //網路出錯時的原因回報:
            mNetworkInfo.getReason();

       




完整程式碼:

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.chat.a015865.checkinternet.MainActivity">

    <LinearLayout
        android:id="@+id/line_one"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="有無網路連線:"
            android:textColor="@android:color/black" />

        <TextView
            android:id="@+id/text_one"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text=":xx" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/line_two"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="網路連線的名稱:"
            android:textColor="@android:color/black" />

        <TextView
            android:id="@+id/text_two"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text=":xx" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/line_three"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="網路連線狀態:"
            android:textColor="@android:color/black" />

        <TextView
            android:id="@+id/text_three"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text=":xx" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/line_four"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="網路是否可使用:"
            android:textColor="@android:color/black" />

        <TextView
            android:id="@+id/text_four"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text=":xx" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/line_five"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="網路是否已連接or連線中:"
            android:textColor="@android:color/black" />

        <TextView
            android:id="@+id/text_five"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text=":xx" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/line_six"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="網路是否故障有問題:"
            android:textColor="@android:color/black" />

        <TextView
            android:id="@+id/text_six"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text=":xx" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/line_seven"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="網路是否在漫遊模式:"
            android:textColor="@android:color/black" />

        <TextView
            android:id="@+id/text_seven"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text=":xx" />
    </LinearLayout>
    <LinearLayout
        android:id="@+id/line_eight"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="網路詳細狀態:"
            android:textColor="@android:color/black" />

        <TextView
            android:id="@+id/text_eight"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text=":xx" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="網路狀態詳細資訊:"
            android:textColor="@android:color/black" />

        <TextView
            android:id="@+id/text_night"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text=":xx" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="網路出錯時的原因回報:"
            android:textColor="@android:color/black" />

        <TextView
            android:id="@+id/text_ten"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text=":xx" />
    </LinearLayout>

    <WebView
        android:id="@+id/webview_show"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>


MainActivity.java

public class MainActivity extends AppCompatActivity {

    private TextView mTextTen, mTextNight, mTextEight, mTextOne, mTextTwo, mTextThree, mTextFour, mTextFive, mTextSix, mTextSeven;
    private Context context;
    private WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;
        initView();
        checkNetWork();
        initSet();

    }

    private void initView() {
        mWebView = (WebView) findViewById(R.id.webview_show);
        mTextOne = (TextView) findViewById(R.id.text_one);
        mTextTwo = (TextView) findViewById(R.id.text_two);
        mTextThree = (TextView) findViewById(R.id.text_three);
        mTextFour = (TextView) findViewById(R.id.text_four);
        mTextFive = (TextView) findViewById(R.id.text_five);
        mTextSix = (TextView) findViewById(R.id.text_six);
        mTextSeven = (TextView) findViewById(R.id.text_seven);
        mTextEight = (TextView) findViewById(R.id.text_eight);
        mTextNight = (TextView) findViewById(R.id.text_night);
        mTextTen = (TextView) findViewById(R.id.text_ten);
    }

    private void initSet() {

        mWebView.setWebViewClient(new WebViewClient());
        WebSettings websettings = mWebView.getSettings();
        websettings.setSupportZoom(true);
        websettings.setBuiltInZoomControls(true);
        websettings.setDisplayZoomControls(false);
        websettings.setJavaScriptEnabled(true);
        websettings.setAppCacheEnabled(true);
        websettings.setSaveFormData(true);
        websettings.setAllowFileAccess(true);
        websettings.setDomStorageEnabled(true);
        
    }

    private void checkNetWork() {
        ConnectivityManager mConnectivityManager =
                (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();

        if (mNetworkInfo != null) {
            //網路是否已連線
            mNetworkInfo.isConnected();
            mTextOne.setText("" + mNetworkInfo.isConnected());
            //網路連線方式名稱
            mNetworkInfo.getTypeName();
            mTextTwo.setText("" + mNetworkInfo.getTypeName());
            //網路連線狀態
            mNetworkInfo.getState();
            mTextThree.setText("" + mNetworkInfo.getState());
            //網路是否可使用
            mNetworkInfo.isAvailable();
            mTextFour.setText("" + mNetworkInfo.isAvailable());
            //網路是否已連接or連線中
            mNetworkInfo.isConnectedOrConnecting();
            mTextFive.setText("" + mNetworkInfo.isConnectedOrConnecting());
            //網路是否故障有問題
            mNetworkInfo.isFailover();
            mTextSix.setText("" + mNetworkInfo.isFailover());
            //網路是否在漫遊模式
            mNetworkInfo.isRoaming();
            mTextSeven.setText("" + mNetworkInfo.isRoaming());
            //網路詳細狀態
            mNetworkInfo.getDetailedState();
            mTextEight.setText("" + mNetworkInfo.getDetailedState());
            //網路狀態詳細資訊
            mNetworkInfo.getExtraInfo();
            mTextNight.setText("" + mNetworkInfo.getExtraInfo());
            //網路出錯時的原因回報:
            mNetworkInfo.getReason();
            mTextTen.setText("" + mNetworkInfo.getReason());
            mWebView.loadUrl("http://nikeru8.blogspot.tw/");
        } else {
            new AlertDialog.Builder(this).setMessage("沒有網路")
                    .setPositiveButton("前往設定網路", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            Intent callNetSettingIntent = new Intent(
                                    android.provider.Settings.ACTION_NETWORK_OPERATOR_SETTINGS);
                            Toast.makeText(context, "請前往開啟網路", Toast.LENGTH_LONG).show();
                            startActivity(callNetSettingIntent);
                        }
                    })
                    .show();

        }
    }
}




Demo:

https://drive.google.com/open?id=0Byk75IYx-dKXaW1DT0NQWE03Tnc

影片中的Dialog請參考朝狀結構篇:
http://nikeru8.blogspot.tw/2016/07/androiddialog-button.html
影片中WebView:
http://nikeru8.blogspot.tw/2017/03/android.html

沒有留言:

張貼留言

協程(coroutine) - 協程為什麼要學它?

 Coroutine 協程 再強調一次 協程就是由kotlin官方所提供的線程api //Thread Thread { }.start() //Executor val execu...