Android Studio:Rx.Network 有無網路偵測、可回傳 Boolean 值做動作

2019/12/29 582 0 軟體應用 , 行動平台 , 程式設計 , Android , JAVA , APP開發

這次研究的過程中發現了這個 Rx.Network 依賴庫,可以幫助我們監聽 Android 的網路狀態,這次我要使用它的 Boolean 回傳工程讓我的 APP 可以得知現在是否有開啟網路,這個不管是 Wi-Fi 或行動數據都是適用的!介面簡單做個 TextView 用來顯示「有網路」與「無網路」,搭配 Toast 提示顯示「網路連線」與「網路中斷」,這次用 Java 來撰寫判斷程式,讓我們開始實作吧!這次我們用 Android Studio 新增一個 Empty Activity 來改。

📁 res → 📁 layout → 📄 activity_main.xml


▲ 設計模式看大致上長這樣,預設先讓它顯示載入中,到時候 Java 程式會給它顯示「無網路」或「有網路」。

▲ 切換成原始碼模式,我們就直接用現有的 TextView 稍作修改,加上 ID 之後寫 Java 會用到,完整原始碼如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Loading..."
        android:textSize="60sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

📄 build.gradle (Project)


▲ 記得在箭頭位置加上以下原始碼:

maven { url "https://jitpack.io" }

📄 build.gradle (Module)


▲ 添加依賴項,在箭頭位置加上以下原始碼:

implementation 'io.andref:Rx.Network:1.0.1'

📁 manifests → 📄 AndroidManifest.xml


▲ 添加權限,在箭頭位置加上以下原始碼:

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

📁 java → 📄 MainActivity.java


▲ 完整判斷 Java 程式,基本上寫在 onCreate 區塊內,使用的是它提供的 Boolean 回傳來偵測網路的開啟或關閉,完整程式碼如下:

package tw.mnya.rxnetwork;

import androidx.appcompat.app.AppCompatActivity;

import android.net.ConnectivityManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

import io.andref.rx.network.RxNetwork;
import rx.functions.Action1;

public class MainActivity extends AppCompatActivity {

    private TextView info;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        info = findViewById(R.id.info);

        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        RxNetwork.connectivityChanges(this, connectivityManager)
                .subscribe(new Action1<Boolean>()
                {
                    @Override
                    public void call(Boolean connected)
                    {
                        if (connected) {
                            info.setText("有網路");
                            Toast.makeText(getApplicationContext(), "網路連線", Toast.LENGTH_SHORT).show();
                        } else {
                            info.setText("無網路");
                            Toast.makeText(getApplicationContext(), "網路中斷", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }
}


▲ 實際運作效果截圖,我是在開始或關閉網路後馬上截圖的,因此下方 Toast 提示還在。

⌨️ GitHub 存放庫:https://github.com/qwe987299/Rx.Network

贊助廣告 ‧ Sponsor advertisements

留言區 / Comments

萌芽論壇