Delphi XE7のAndroidアプリケーションで通信状態が、モバイル通信かWi-Fi通信か未接続かを判定する方法を紹介します。
モバイル通信の時は送受信するデータのサイズを小さくしてアプリケーションのレスポンスを良くするなどの工夫ができます。
メニューの「プロジェクト」→「オプション」→「使用する権限」から「ネットワーク状態へのアクセス」にチェックを入れます。
Androidのandroid.net.ConnectivityManagerクラスとandroid.net.NetworkInfoクラスを使用するため、ブリッジファイルを作成します。
Java2OP.exe -classes android.net.ConnectivityManager android.net.NetworkInfo -unit Androidapi.JNI.Interfaces
ボタンを押したときに、通信状態を表示するプログラムです。
uses
Androidapi.JNIBridge,
Androidapi.Helpers,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.Interfaces;
procedure TForm1.Button1Click(Sender: TObject);
var
ConnectivityManagerObj: JObject;
ConnectivityManager: JConnectivityManager;
NetworkInfo: JNetworkInfo;
NetworkType: Integer;
begin
ConnectivityManagerObj := SharedActivityContext.getSystemService
(TJContext.JavaClass.CONNECTIVITY_SERVICE);
ConnectivityManager := TJConnectivityManager.Wrap
((ConnectivityManagerObj as ILocalObject).GetObjectID);
NetworkInfo := ConnectivityManager.getActiveNetworkInfo();
if NetworkInfo = nil then
begin
ShowMessage('未接続');
Exit;
end;
NetworkType := NetworkInfo.getType;
if NetworkType = TJConnectivityManager.JavaClass.TYPE_WIFI then
begin
ShowMessage('Wi-Fiデータ通信');
end
else if NetworkType = TJConnectivityManager.JavaClass.TYPE_MOBILE then
begin
ShowMessage('モバイルデータ通信');
end;
end;
ボタンを押すと、通信状態が表示されます。