일본인 개발자인 山本隆(야마모토 타카시)의 글을 참고해 안드로이드 앱에서 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 상태 설정
❑ 최종 화면과 소스코드
참고 글
- Delphi XE7의 Android 애플리케이션에서 Wifi가 사용 여부를 조사(일본어)
- Delphi XE7의 Android 애플리케이션에서 Wifi의 유효 · 무효를 설정(일본어)
- Java2OP.exe 다운로드 안내
- 엠바카데로 기술문서 - Java2OP.exe, the Native Bridge File Generator for Android