これは旧版Android API(Android 7以前)の実装方法です。ブロードキャストレシーバー +
ConnectivityManager+NetworkInfoを使用してネットワーク接続と切断を判定します。
1. 核心知識
- ConnectivityManager:ネットワーク接続状態管理専用のシステムサービスクラスです。
- 権限:
AndroidManifest.xmlにネットワーク状態権限を追加する必要があります
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Code language: HTML, XML (xml)
- 仕組み:ネットワークに変化が発生するとシステムがネットワークブロードキャストを送信します。
BroadcastReceiverのonReceiveコールバック内でConnectivityManagerから現在のネットワーク情報を取得し、接続または切断を判断します。
2. onReceive 完全コード
public void onReceive(Context context, Intent intent) {
// ネットワーク管理システムサービスを取得
ConnectivityManager connectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
// アクティブなネットワーク情報を取得(非推奨API)
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null) {
if (networkInfo.isAvailable()) {
Toast.makeText(context, "ネットワーク接続", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "ネットワーク切断", Toast.LENGTH_LONG).show();
}
} else {
// networkInfoがnullの場合、ネットワークなし
Toast.makeText(context, "ネットワーク切断", Toast.LENGTH_LONG).show();
}
}
Code language: JavaScript (javascript)
3. 重要な注意点(非推奨について)
getActiveNetworkInfo()、NetworkInfo Android 10(API29)で廃止されました
新しいAndroidバージョンでは
ConnectivityManager.NetworkCallbackコールバック方式でネットワーク監視することが推奨され、旧ブロードキャスト+NetworkInfoの記述は推奨されません。
旧方式の欠点
- Android 8.0(API26)以降、静的登録されたネットワーク状態ブロードキャストに制限がかかります。静的登録ではネットワーク変化ブロードキャストを受信できず、レシーバーを動的登録する必要があります。
NetworkInfoクラスは廃止済み。新しいOSで直接呼び出すと警告が出たり動作しなくなったりします。
4. ブロードキャストレシーバーの動的登録
// ブロードキャストレシーバー定義
public class NetReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 上記のネットワーク判定コードをここに記述
}
}
// Activity内で動的登録
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
NetReceiver receiver = new NetReceiver();
registerReceiver(receiver, filter);
Code language: PHP (php)
Android ネットワーク接続/切断ブロードキャスト監視
Previous: 例 – システムブロードキャストを受信する
Next: 静的登録を使用した起動時の通知実装