Notice
Recent Posts
Recent Comments
Link
투케이2K
844. (Android/Java) 안드로이드 WifiNetworkSpecifier , NetworkRequest , ConnectivityManager 사용 WPA 와이파이 연결 본문
Android
844. (Android/Java) 안드로이드 WifiNetworkSpecifier , NetworkRequest , ConnectivityManager 사용 WPA 와이파이 연결
투케이2K 2024. 8. 20. 21:13[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java / Kotlin
[소스 코드]
try {
// ---------------------------------------------------------------
// TODO [사전] : 해당 연결하려는 와이파에 이미 연결 된 상태 인 지 확인 필요
// ---------------------------------------------------------------
// TODO [사전] : 와이파이 기능이 활성화 된 상태 필요
// ---------------------------------------------------------------
// TODO [사전] : 위치 권한 상태 부여 및 근처기기 권한 상태 부여 필요
// ---------------------------------------------------------------
// TODO [설명] : 앱 전용 해당 와이파이에 연결 >> IP 주소 획득 후 서버 소켓 활성 수행
// ---------------------------------------------------------------
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
// --------------------------------------------
// TODO [WifiNetworkSpecifier] : Wi-Fi 네트워크를 요청하는 데 사용되는 네트워크 지정자 객체
// --------------------------------------------
// TODO [와이파이] : 설정 화면에서 연결 된 적이 없어도 AP 연결 및 IP 획득 >> 서버 소켓 활성 수행
// --------------------------------------------
String ssid = "TWOK";
String password = "t0123456789";
WifiNetworkSpecifier wifiNetworkSpecifier = new WifiNetworkSpecifier.Builder()
.setSsid(String.valueOf(ssid))
.setWpa2Passphrase(String.valueOf(password)) // TODO [WPA/WPA2 형식]
.build();
// --------------------------------------------
// TODO [WifiNetworkSpecifier] : 와이파이 정보 입력
// --------------------------------------------
NetworkRequest networkRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.setNetworkSpecifier(wifiNetworkSpecifier)
.build();
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
connectivityManager.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
super.onAvailable(network);
S_Log._W_("requestNetwork :: onAvailable :: Wifi Connection Success", null);
// [와이파이 정보 확인]
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkCapabilities netCaps = cm.getNetworkCapabilities(network);
WifiInfo wifiInfo = (WifiInfo) netCaps.getTransportInfo();
int wIp = wifiInfo.getIpAddress();
String getIpAddress = String.format("%d.%d.%d.%d", (wIp & 0xff), (wIp >> 8 & 0xff), (wIp >> 16 & 0xff), (wIp >> 24 & 0xff));
// [로그 출력]
S_Log._W_("requestNetwork :: onAvailable IP 정보 출력 실시", new String[]{
"getIpAddress :: " + String.valueOf(getIpAddress)
});
// [콜백 해제] : [AP 연결 종료]
//try { connectivityManager.unregisterNetworkCallback(this); } catch (Exception e){ e.printStackTrace(); }
}
@Override
public void onUnavailable() {
super.onUnavailable();
S_Log._E_("requestNetwork :: onUnavailable :: Wifi Connection Fail", null);
// [콜백 해제] : [AP 연결 종료]
try { connectivityManager.unregisterNetworkCallback(this); } catch (Exception e){ e.printStackTrace(); }
}
@Override
public void onLost(Network network) {
super.onLost(network);
S_Log._E_("requestNetwork :: onLost :: Wifi Connection Lost", null);
// [콜백 해제] : [AP 연결 종료]
try { connectivityManager.unregisterNetworkCallback(this); } catch (Exception e){ e.printStackTrace(); }
}
});
}
}
catch (Exception e){
e.printStackTrace();
}
반응형
'Android' 카테고리의 다른 글
Comments