Delphi [XE7] 안드로이드 WiFi 상태조회와 설정하기
2015.02.12 18:56
일본인 개발자인 山本隆(야마모토 타카시)의 글을 참고해 안드로이드 앱에서 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 절에 구현에 필요한 유닛을 추가합니다.
1 2 3 4 5 6 | uses Androidapi . Helpers, Androidapi . JNI . JavaTypes, Androidapi . JNI . GraphicsContentViewText, Androidapi . JNIBridge, Androidapi . JNI . WifiManager; |
WiFi 설정(키고 끄기)하기
1 2 3 4 5 6 7 8 9 10 11 12 | 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 상태 조회
1 2 3 4 5 6 7 8 9 10 11 12 | 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 상태 설정
❑ 최종 화면과 소스코드