Androidでインターネット接続状態を確認する方法|BroadcastReceiverを使った実装手順を解説
この記事では、BroadcastReceiver(ブロードキャストレシーバー)を使って、Androidアプリでインターネット接続の状態を確認する方法を解説します。Wi-Fiやモバイルデータ通信の接続状況を検知し、結果をトーストメッセージで表示するサンプルアプリを、ステップごとに作成していきましょう。
ステップ1:Android Studioで新規プロジェクトを作成する
まずはAndroid Studioを起動し、「File」→「New Project」から新しいプロジェクトを作成します。必要な項目をすべて入力して、プロジェクトのセットアップを完了させてください。
ステップ2:AndroidManifest.xmlにネットワーク状態の権限を追加する
インターネット接続状態を取得するには、AndroidManifest.xmlファイルにネットワーク状態へのアクセス権限(ACCESS_NETWORK_STATE)を追加する必要があります。以下のように記述しましょう。
<?xml version="1.0" encoding = "utf-8"?> <manifest xmlns:android = "https://schemas.android.com/apk/res/android" package = "com.example.andy.myapplication"> <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>
ステップ3:MainActivity.javaを実装する
続いて、メインアクティビティとなるMainActivity.javaの内容です。このファイルには、アクティビティの基本的なライフサイクルメソッドが含まれます。
ここではTextViewを作成し、ユーザーがクリックするとbroadcastIntent()メソッドが呼び出され、CONNECTIVITY_ACTIONインテントがブロードキャストされる仕組みになっています。また、onPause()メソッド内でレシーバーの登録解除を行っている点にも注目してください。
import android.content.BroadcastReceiver;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private BroadcastReceiver MyReceiver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyReceiver = new MyReceiver();
TextView click=findViewById(R.id.click);
click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
broadcastIntent();
}
});
}
public void broadcastIntent() {
registerReceiver(MyReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(MyReceiver);
}
}ステップ4:NetworkUtilクラスを作成する
ネットワークの接続状態を判定するために、NetworkUtilクラスを作成します。このクラスでは、現在の接続がWi-Fiなのかモバイルデータ通信なのか、あるいはオフラインなのかを判別し、対応するステータス文字列を返します。
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
class NetworkUtil {
public static String getConnectivityStatusString(Context context) {
String status = null;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) {
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
status = "Wifi enabled";
return status;
} else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
status = "Mobile data enabled";
return status;
}
} else {
status = "No internet is available";
return status;
}
return status;
}
}ステップ5:MyReceiverクラス(BroadcastReceiver)を作成する
次に、ブロードキャストレシーバークラス「MyReceiver.java」を作成します。このレシーバーは、NetworkUtilクラスから取得した接続状態をもとに、UI(トースト表示)を更新する役割を担います。
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String status = NetworkUtil.getConnectivityStatusString(context);
if(status.isEmpty()) {
status="No Internet Connection";
}
Toast.makeText(context, status, Toast.LENGTH_LONG).show();
}
}ステップ6:マニフェストファイルにレシーバーを登録する
作成したBroadcastReceiverをマニフェストファイルに登録します。以下のように<receiver>要素を追加し、接続変更イベント(CONNECTIVITY_CHANGE)やWi-Fi状態変更イベント(WIFI_STATE_CHANGED)を受け取れるようにしましょう。
<?xml version = "1.0" encoding = "utf-8"?> <manifest xmlns:android="https://schemas.android.com/apk/res/android" package = "com.example.andy.myapplication"> <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> <receiver android:name = "MyReceiver"> <intent-filter> <action android:name = "android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name = "android.net.wifi.WIFI_STATE_CHANGED" /> </intent-filter> </receiver> </application> </manifest>
ステップ7:activity_main.xmlでレイアウトを定義する
res/layout/activity_main.xmlファイルには、クリックすることで接続状態のチェックを実行できるTextViewを配置します。
<?xml version = "1.0" encoding = "utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android = "https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = ".MainActivity"> <TextView android:id="@+id/click" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click here" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </android.support.constraint.ConstraintLayout>
アプリを実行して動作を確認する
それでは、アプリを実行してみましょう。実機のAndroid端末をパソコンに接続していることを前提に進めます。Android Studioでプロジェクト内のいずれかのアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。実行デバイスとして自分のモバイル端末を選択すると、端末にアプリの初期画面が表示されます。
Wi-Fi接続中に画面をクリックすると、以下のように接続状態を示すトーストメッセージが表示されます。

Wi-Fiをオフにした場合は、以下のように「No internet is available(利用可能なインターネットがありません)」というメッセージが表示されます。



補足:最新のAndroidバージョンでの注意点
本記事で紹介しているコードは、学習用の古典的な実装例です。CONNECTIVITY_ACTIONやNetworkInfoといったAPIは、Android 7.0(API 24)以降で非推奨(deprecated)となっています。近年のAndroidバージョンをターゲットにする場合は、ConnectivityManager.NetworkCallbackを使用してネットワーク状態を監視する方法が公式に推奨されていますので、実際の開発ではこちらの採用も検討してみてください。
-
Androidでデータ使用量を確認し、通信速度を監視する方法|Check Data Usageの使い方
Wi-Fiに接続していないとき、モバイルデータはインターネットへのアクセスを可能にしてくれる頼もしい存在です。しかし、高性能なグラフィックを搭載したスマートフォンやデータを大量に消費するアプリを使っていると、知らないうちに通信量が膨らみ、月末に高額な請求を受けてしまうことも少なくありません。この記事では、Androidでデータ使用量を確認し、無駄な出費を防ぐ方法を詳しく解説します。 データ使用量を確認する方法 まず重要なのは、現在のデータ使用量を正確に把握することです。使用量を知らなければ、モバイルデータの消費についてどんな見直しが必要なのか判断できません。最も手軽な方法は、「Check Da
-
Androidの通信速度を上げる5つの簡単な方法
学生でもビジネスパーソンでも、インターネットは日常生活に欠かせない存在です。Androidでは3Gや4Gといった高速通信技術を利用できますが、通信速度をさらに向上させられるなら、それに越したことはありません。速度改善を支援するアプリは数多くありますが、実は基本的な最適化だけでも十分な効果が期待できます。 今回は、Androidのインターネット速度を向上させるための、シンプルで基本的な5つのステップをご紹介します。 1. キャッシュを削除する キャッシュメモリがいっぱいになると、Androidの動作が全体的に遅くなり、インターネット速度にも悪影響が及びます。キャッシュは手動で削除することもでき