Delphi XE7のAndroidアプリケーションで通信状態を判定するには

Delphi XE7のAndroidアプリケーションで通信状態が、モバイル通信かWi-Fi通信か未接続かを判定する方法を紹介します。

モバイル通信の時は送受信するデータのサイズを小さくしてアプリケーションのレスポンスを良くするなどの工夫ができます。

メニューの「プロジェクト」→「オプション」→「使用する権限」から「ネットワーク状態へのアクセス」にチェックを入れます。

01

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;

ボタンを押すと、通信状態が表示されます。

02

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください