Flutterアプリでは、「ネットワークに接続されているか」を判定するだけでなく、「どのようなネットワークに接続されているのか」「通信品質はどの程度なのか」といった情報を取得したいケースがあります。
例えば、
- Wi-Fiとモバイル通信で画質を切り替える
- 通信速度に応じて動画品質を変更する
- 通信状態が悪い場合は画像を低画質で読み込む
- オンラインゲームで通信品質を表示する
- ネットワーク診断機能を実装する
このようなアプリでは、ネットワークの詳細情報を取得できると便利です。
今回紹介する flutter_network_capabilities は、Android・iOSで現在利用しているネットワークの詳細情報を取得できるFlutterプラグインです。
接続タイプだけでなく、利用可能な帯域幅や、Androidでは電波強度なども取得できるため、ネットワーク品質に応じた柔軟なアプリを実装できます。
この記事では、flutter_network_capabilities の基本的な使い方から、ネットワーク情報の取得方法、Wi-Fi・モバイル通信の判定、帯域幅の取得、実践的な活用例まで詳しく解説します。
flutter_network_capabilitiesとは?
flutter_network_capabilities は、Android・iOSで現在のネットワーク情報を取得するためのFlutterプラグインです。
一般的な接続判定ライブラリでは、
- Wi-Fi
- モバイル通信
- 接続なし
程度しか取得できません。
一方、このパッケージでは、さらに詳細なネットワーク情報を取得できます。
例えば、
- 接続タイプ
- ダウンロード帯域幅
- アップロード帯域幅
- Androidでの電波強度
- Android NetworkCapabilities情報
などを取得できます。
ネットワーク品質に応じてアプリの動作を最適化したい場合に便利なライブラリです。
flutter_network_capabilitiesの特徴
主な特徴は以下の通りです。
| 機能 | 対応 |
|---|---|
| Wi-Fi判定 | ○ |
| モバイル通信判定 | ○ |
| ネットワーク能力取得 | ○ |
| ダウンロード帯域取得 | ○ |
| アップロード帯域取得 | ○ |
| Android Signal Strength | ○ |
| Android対応 | ○ |
| iOS対応 | ○ |
| Flutter対応 | ○ |
Androidではより詳細な情報を取得できますが、iOSではOSの制約により取得できる情報が一部制限されています。
インストール
pubspec.yaml に追加します。
YAML
dependencies:
flutter_network_capabilities: ^latest
または以下のコマンドで追加できます。
Bash
flutter pub add flutter_network_capabilities
利用時はインポートします。
Dart
import 'package:flutter_network_capabilities/flutter_network_capabilities.dart';
ネットワーク情報を取得する
基本的な利用方法は非常にシンプルです。
Dart
final networkInfo =
await FlutterNetworkCapabilities
.getNetworkCapabilities();
print(networkInfo);
現在利用しているネットワークの情報が取得できます。
取得した情報を利用して、通信品質に応じた処理を実装できます。
ネットワーク種別を判定する
取得した情報から接続方法を確認できます。
Dart
final info =
await FlutterNetworkCapabilities
.getNetworkCapabilities();
print(info.transportTypes);
例えば、
Wi-Fi
または
Cellular
のような情報を取得できます。
これにより、
- Wi-Fi接続時のみ大容量データをダウンロード
- モバイル通信時は画像を圧縮
- オフライン時はキャッシュ表示
などの制御が可能になります。
ダウンロード帯域を取得する
Androidでは推定ダウンロード帯域幅を取得できます。
Dart
print(
info.linkDownstreamBandwidthKbps,
);
例えば、
85000 kbps
のような値を取得できます。
この情報を利用すると、
- 動画画質の変更
- 大容量ファイルのダウンロード可否
- ストリーミング品質調整
などを実装できます。
アップロード帯域を取得する
アップロード帯域も取得できます。
Dart
print(
info.linkUpstreamBandwidthKbps,
);
例えば、
ライブ配信やファイルアップロード時に、
- 高画質アップロード
- 低画質アップロード
を切り替える判断材料として利用できます。
電波強度を取得する(Android)
Androidではシグナル強度を取得できます。
Dart
print(info.signalStrength);
例えば、
-65 dBm
のような値を取得できます。
これにより、
- 電波が弱いことを通知
- 接続品質インジケーター表示
- 通信品質ログ収集
などの用途に利用できます。
ネットワーク品質に応じて画像を切り替える
例えば、
Dart
if (info.linkDownstreamBandwidthKbps >
50000) {
loadHighResolutionImage();
} else {
loadCompressedImage();
}
高速通信なら高画質画像、
低速通信なら軽量画像を表示できます。
動画ストリーミングへ活用する
動画アプリでは、
高速通信
↓
1080p
中速通信
↓
720p
低速通信
↓
480p
のような画質切り替えを実装できます。
ネットワーク品質に応じて最適な体験を提供できます。
オンラインゲームへの活用
オンラインゲームでは、
通信品質
↓
Excellent
Good
Poor
のような表示がよくあります。
取得した帯域幅や電波強度を利用して、プレイヤーへ現在の通信品質を表示できます。
チャットアプリへの利用
チャットアプリでは、
- 添付画像サイズ
- 動画アップロード品質
- 自動ダウンロード
などをネットワーク状況によって変更できます。
例えばWi-Fi接続時のみ動画を自動ダウンロードする、といった実装も容易になります。
ネットワーク診断機能
設定画面に、
- 接続タイプ
- 通信品質
- 電波強度
- 帯域幅
などを表示すると、ユーザー自身で通信状況を確認できます。
サポート対応時にも役立つでしょう。
AndroidとiOSの違い
Androidでは比較的多くの情報を取得できます。
Wi-Fi情報
帯域幅
Signal Strength
NetworkCapabilities
一方、iOSではOSの仕様により取得できる情報が限定されます。
そのため、AndroidとiOSで取得できる項目が異なることを考慮して実装する必要があります。
メリット
ネットワーク品質を取得できる
接続状態だけでなく、通信品質まで把握できます。
Android・iOS対応
両プラットフォームで利用できます。
ネットワーク最適化に利用できる
通信状況に応じた画質やダウンロード制御を実装できます。
シンプルなAPI
少ないコードでネットワーク情報を取得できます。
UX向上につながる
通信品質に応じて最適なコンテンツを提供できます。
注意点
Androidの方が取得できる情報が多い
iOSではOSの制約により一部情報は取得できません。
実際の通信速度ではない
取得できる帯域幅は推定値であり、スピードテストのような実測値ではありません。
OSバージョンによる違いがある
Androidのバージョンによって取得できる情報が異なる場合があります。
権限が必要になる場合がある
利用する情報によっては、Android側で適切な権限設定が必要になることがあります。
まとめ
flutter_network_capabilities は、Flutterアプリでネットワークの詳細情報を取得できる便利なプラグインです。
接続種別だけでなく、ダウンロード・アップロード帯域や、Androidでは電波強度なども取得できるため、ネットワーク品質に応じた柔軟なアプリを構築できます。
主な特徴として、
- Wi-Fi・モバイル通信の判定
- ダウンロード帯域取得
- アップロード帯域取得
- Androidでの電波強度取得
- Android・iOS対応
- シンプルなAPI
などが挙げられます。
特に、動画配信アプリ、オンラインゲーム、チャットアプリ、ネットワーク診断ツールなど、通信品質に応じて動作を最適化したいアプリで活躍するでしょう。
通信状況をより細かく把握したいFlutterアプリでは、有力な選択肢の一つとなるパッケージです。
