Android
 Computer >> コンピューター >  >> プログラミング >> Android

Androidでネットワーク接続状態を監視する方法をわかりやすく解説

はじめに

この記事では、Androidアプリでネットワーク接続の状態(Wi-Fi接続中/モバイルデータ通信中/オフライン)を監視・判定する方法を、実際に動作するサンプルコードとともに解説します。

ConnectivityManagerクラスを利用することで、端末が現在どの種類のネットワークに接続しているかを簡単に取得できます。今回は「Check Network」ボタンをタップすると接続状態をチェックし、その結果をアイコンとテキストで表示するシンプルなアプリを作成していきましょう。

手順1:新規プロジェクトを作成する

Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。

手順2:レイアウトファイル(activity_main.xml)を編集する

res/layout/activity_main.xml に以下のコードを追加します。画面中央には接続状態を示すImageView、その下にステータスを表示するTextView、画面下部にはチェック用のButtonを配置しています。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <ImageView
        android:id="@+id/ivConStatus"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_centerInParent="true"
        android:layout_marginTop="24sp"
        android:scaleType="fitCenter"
        android:contentDescription="@string/todo" />
    <TextView
        android:id="@+id/tvConStatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:textSize="24sp"
        android:layout_centerHorizontal="true"
        android:padding="4dp" />
    <Button
        android:id="@+id/btnCheckNetwork"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:text="Check Network"/>
</RelativeLayout>

手順3:MainActivity.javaを実装する

src/MainActivity.java に以下のコードを追加します。

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
    ImageView ivConStatus;
    TextView tvconStatus;
    Button btnCheckNetwork;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ivConStatus = findViewById(R.id.ivConStatus);
        tvconStatus = findViewById(R.id.tvConStatus);
        btnCheckNetwork = findViewById(R.id.btnCheckNetwork);
        btnCheckNetwork.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkNetworkConnectionStatus();
            }
        });
    }
    private void checkNetworkConnectionStatus() {
        boolean wifiConnected;
        boolean mobileDataConnected;
        ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();
        if (networkInfo!=null && networkInfo.isConnected()){
            wifiConnected = networkInfo.getType() == ConnectivityManager.TYPE_WIFI;
            mobileDataConnected = networkInfo.getType() == ConnectivityManager.TYPE_MOBILE;
            if (wifiConnected){
                ivConStatus.setImageResource(R.drawable.ic_wifi);
                tvconStatus.setText("WIFI is Connected");
            } else if (mobileDataConnected){
                ivConStatus.setImageResource(R.drawable.ic_mobiledata);
                tvconStatus.setText("Mobile data is Connected");
            }
        } else {
            ivConStatus.setImageResource(R.drawable.ic_dnd);
            tvconStatus.setText("No Connections are available");
        }
    }
}

処理の中心となるのは checkNetworkConnectionStatus() メソッドです。getSystemService(Context.CONNECTIVITY_SERVICE) でConnectivityManagerのインスタンスを取得し、getActiveNetworkInfo() によって現在アクティブなネットワーク情報を取得します。networkInfoがnullではなく、isConnected() がtrueを返す場合に「接続中」と判断できます。

さらに getType() を使って、接続先がWi-Fi(TYPE_WIFI)かモバイルデータ通信(TYPE_MOBILE)かを判別し、それぞれに対応したアイコンとメッセージを表示します。どちらにも該当しない場合は「利用可能な接続なし」として扱います。

補足: getActiveNetworkInfo() および NetworkInfo は新しいAPIレベルでは非推奨(Deprecated)となっています。最新のAndroid開発では、ConnectivityManager.NetworkCallback や NetworkCapabilities を使用した監視方法が推奨されている点に注意してください。

手順4:AndroidManifest.xmlに権限を追加する

ネットワーク状態を取得するには、マニフェストファイルへのACCESS_NETWORK_STATEパーミッションの宣言が必須です。androidManifest.xml に以下のコードを追加してください。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

アプリを実行してみよう

それでは、作成したアプリを実行してみましょう。ここでは実機のAndroidスマートフォンがパソコンに接続されているものとして説明します。Android Studioでプロジェクト内の任意のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。デバイス選択画面で自分のモバイル端末を選択すると、端末上に以下のような画面が表示されます。

Androidでネットワーク接続状態を監視する方法をわかりやすく解説

Androidでネットワーク接続状態を監視する方法をわかりやすく解説

Androidでネットワーク接続状態を監視する方法をわかりやすく解説

ボタンをタップすれば、Wi-Fi接続中・モバイルデータ通信中・オフラインのいずれかの状態がアイコンとテキストで即座に表示されます。ぜひ実際に動かして、ネットワーク状態の変化を確認してみてください。

  1. AndroidでデバイスIDを取得する方法!サンプルコード付きで徹底解説

    はじめに この記事では、AndroidアプリでデバイスID(IMEI)を取得する方法を、実際に動作するサンプルコードを使いながらステップごとに解説します。SMSや電話番号に関わるランタイムパーミッションの扱い方もあわせて学べるので、Android開発の基礎を固めたい方はぜひ参考にしてください。 ステップ1:Android Studioで新規プロジェクトを作成する まず、Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目を入力して、新しいプロジェクトを作成しましょう。 ステップ2:レイアウトファイル(activity_main.

  2. Androidで線を引く方法とは?Canvasを使った描画手順をステップ解説

    この記事では、Androidアプリで線を描画する方法を、実際のサンプルコードとともにステップごとに解説します。BitmapとCanvasを組み合わせれば、ボタンをタップしたタイミングで画面上に線を簡単に描くことができます。 作成するアプリの概要 今回作成するのは、画面下部の「Draw Line」ボタンを押すと、中央のImageView上に赤い横線が表示されるシンプルなアプリです。レイアウトの定義、MainActivityへの処理の記述、マニフェストファイルの確認という流れで進めていきます。 ステップ1:新規プロジェクトを作成する Android Studioを起動し、「File」→「New P