본문 바로가기

파이어몽키

[XE7] 안드로이드 WiFi 상태조회와 설정하기

일본인 개발자인 山本隆(야마모토 타카시)의 글을 참고해 안드로이드 앱에서 Wifi 상태를 읽고 키고끄는 기능을 구현해 보고 공유합니다.

❑ 안드로이드 WifiManager 델파이 브릿지 파일 생성

Java2OP 툴을 이용해 WifiManager 델파이 브릿지 파일을 만듭니다.

Java2OP.exe -classes android.net.wifi.WifiManager -unit Androidapi.JNI.WifiManager


위 명령어를 실행하면 아래와 같이 Androidapi.JNI.WifiManager.pas 유닛파일이 생성됩니다. 



해당 유닛파일을 프로젝트 경로 또는 본인이 관리하는 라이브러리 경로에 복사합니다.(저는 D:\Projects\common\rtl\XE7\android 경로에 복사 후 Option > Library Path에 경로를 등록했습니다.)


만약, 아래와 같은 "Missing JDK. Please install JDK 1.7+ or make sure that it is in your PATH" 메시지가 표시된다면


 커맨드라인에서 아래의 명령어를 이용해 환경변수에 추가 후 다시 시도하기 바랍니다.(도움말)
SET PATH=%PATH%;C:\Program Files\Java\jdk1.7.0_25\bin


❑ Androidapi.JNI.WifiManager 유닛을 이용해 WiFI 제어기능 구현

새로운 프로젝트를 생성하고, 위에서 생성한 Androidapi.JNI.WifiManager를 추가합니다.

uses 절에 구현에 필요한 유닛을 추가합니다.

uses
  Androidapi.Helpers,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNIBridge,
  Androidapi.JNI.WifiManager;

WiFi 설정(키고 끄기)하기

procedure SetWifiEnabled(AEnable: Boolean);
var
  Obj: JObject;
  WifiManager: JWifiManager;
begin
  Obj := SharedActivityContext.getSystemService(TJContext.JavaClass.WIFI_SERVICE);
  if Obj = nil then
    Exit;

  WifiManager := TJWifiManager.Wrap((Obj as ILocalObject).GetObjectID);
  WifiManager.setWifiEnabled(AEnable);
end;

WiFi 상태 조회

function IsWifiEnabled: Boolean;
var
  Obj: JObject;
  WifiManager: JWifiManager;
begin
  Obj := SharedActivityContext.getSystemService(TJContext.JavaClass.WIFI_SERVICE);
  if Obj = nil then
    Exit;

  WifiManager := TJWifiManager.Wrap((Obj as ILocalObject).GetObjectID);
  Result := WifiManager.isWifiEnabled;
end;

❑ 사용자 권한 설정

위 Wifi 제어와 상태조회 기능을 사용할 경우 사용자 권한을 추가해야 합니다.

Project Option > Uses permissions

  • Access wifi state : Wifi 상태 조회

  • Change wifi state : Wifi 상태 설정

❑ 최종 화면과 소스코드


참고 글