Notice
Recent Posts
Recent Comments
Link
투케이2K
190. (TWOK/LOGIC) [android] 안드로이드 기기 등록 시 특정 와이파이 WiFi 에 기기 등록 제한 처리 로직 정리 - Runtime.getRuntime.exec 본문
투케이2K 로직정리
190. (TWOK/LOGIC) [android] 안드로이드 기기 등록 시 특정 와이파이 WiFi 에 기기 등록 제한 처리 로직 정리 - Runtime.getRuntime.exec
투케이2K 2026. 5. 17. 11:15728x90
반응형
[로직 정리]
정리 로직 : Mobile / Android
상태 : [android] 안드로이드 기기 등록 시 특정 와이파이 WiFi 에 기기 등록 제한 처리 로직 정리 - Runtime.getRuntime.exec

[설 명]
// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------
1. 제 목 : [android] 안드로이드 기기 등록 시 특정 와이파이 WiFi 에 기기 등록 제한 처리 로직 정리 - Runtime.getRuntime.exec
2. 테스트 환경 : 안드로이드 / android / WiFi / Runtime.getRuntime.exec
3. 사전) 👉 Runtime.getRuntime().exec() 간략 설명
>> Runtime.getRuntime().exec() 는 자바 (Java) 및 안드로이드에서 외부 프로세스(OS 명령어) 를 실행할 때 사용하는 API입니다.
>> Android 는 Linux 기반이기 때문에 내부적으로 shell 명령 실행이 가능합니다.
>> 기본 사용 방법 :
- Runtime.getRuntime().exec("명령어");
- Runtime.getRuntime().exec("ls");
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------
------------------------------------------------------
✅ 사전 정리) 로직 구현 관련 필요 내용 정리
------------------------------------------------------
1. 안드로이드에서 IoT 장비 기기 등록 시 통신 안정성 확보를 위해 제공한 WiFi 에 최대 N개 기기 등록 제한 처리 필요
2. 고객에게 제공한 WiFi 에는 등록 한 기기 제품 외에 휴대폰 등 다른 장비를 고객이 등록 할 수 있는 이슈 발생 가능
------------------------------------------------------
✅ 로직 정리) Runtime.getRuntime.exec 을 통한 ping 체크 방식으로 연결 된 와이파이 장비 개수 확인 로직
------------------------------------------------------
1. 안드로이드 휴대폰에서 특정 WIFI 에 연결 수행 실시
2. Enumeration<NetworkInterface> 를 사용해 현재 와이파이에 연결 된 부모 IP 주소 획득 실시
3. 부모 IP 주소에서 C 클래스까지 데이터 파싱 수행 (ex : 192.168.145. / 마지막은 제외)
4. Runtime.getRuntime().exec() ping 핑 명령어를 사용해 1 ~ 255 까지 반복문 수행
5. 정상적으로 ping 이 날아 오는 경우 부모에 연결된 자식 클라이언트 장치 IP 조합 실시 (부모 IP 와 + 핑 체크에서 성공한 자식 IP : ex - 192.168.145.51)
6. 조합 된 리스트 확인 후 최대 기기 등록 제한 N개 이상 인 경우 확인 수행
7. 최대 N개 이상 인 경우 사용자에게 경고 팝업창 표시 수행
------------------------------------------------------
✅ 추가 정보) Runtime getRuntime exec 커맨드 명령어 사용해 ping 핑 네트워크 상태 체크 실시 소스 코드 첨부
------------------------------------------------------
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
// [IP 주소 만들기]
String pingIp = "192.168.145.140";
// [핑을 날리면서 인터넷 사용 가능 체크]
Runtime runTime = Runtime.getRuntime();
// -----------------------------------------------------------
// TODO [디바이스 연결 상태는 빠르게 응답 받을 수 있으나, 모바일 응답은 대기 시간이 있어 타임 아웃 시간 늘려야 한다]
// [ip 는 test 하고 싶은 주소 삽입]
// [c = 패킷을 날릴 횟수]
// [W = 상대방이 응답을 주기까지 대기 시간 (Seconds)]
// [s = 전송 패킷 바이트 수]
// -----------------------------------------------------------
String cmd = "ping -c 1 -W 1 "+ pingIp;
// String cmd = "ping -s 10 -c 1 -W 1 "+ pingIp;
// String cmd = "ping -s 5 -c 1 "+ pingIp;
Process proc = null;
proc = runTime.exec(cmd);
proc.waitFor();
/**
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (!proc.waitFor(30, TimeUnit.MILLISECONDS)) {
proc.destroy();
}
}
// */
// --------------------------------------------------------
// [여기서 반환되는 ping 테스트의 결과 값은 0, 1, 2 중 하나]
// [0 : 성공, 1 : fail, 2 : error]
// --------------------------------------------------------
int result = proc.exitValue();
switch (result){
case 0:
S_Log.w("Ping Test", "Ping Success : " + pingIp);
break;
case 1:
S_Log.e("Ping Test", "Ping Fail : " + pingIp);
break;
default:
S_Log.e("Ping Test", "Ping Error : " + pingIp);
break;
}
}
catch (Exception e){
S_Log.e("[ERROR] Ping (핑) 테스트", "Exception :: " + e.getMessage());
}
}
});
thread.start(); // [스레드 수행]
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
▶️ [Android] 안드로이드 모바일 핫스팟 테더링에 연결된 클라이언트 IP 주소 확인 에러 - (Hotspot Connect Client Ip)
https://kkh0977.tistory.com/4263
https://blog.naver.com/kkh0977/223120038516?trackingCode=blog_bloghome_searchlist
▶️ 갤럭시 S24 울트라 (Galaxy S24 Ultra) 설정 : 안드로이드 Android 14 이상 핫스팟에 연결 된 기기 클라이언트 IP 정보 확인 방법
https://kkh0977.tistory.com/5610
https://blog.naver.com/kkh0977/223375272062?trackingCode=blog_bloghome_searchlist
▶️ [Android] [android 13 / target 33] 안드로이드 모바일 핫스팟 테더링에 연결된 클라이언트 IP 주소 획득 방법
https://kkh0977.tistory.com/4264
https://blog.naver.com/kkh0977/223120040525?trackingCode=blog_bloghome_searchlist
▶️ [개선 요청] 안드로이드 ( android ) 기기 로컬 핫스팟 AP 연결 및 TCP IP 소켓 통신 수행 시 다이렉트 AP 연결 기능 개발 요청
https://kkh0977.tistory.com/7307
https://blog.naver.com/kkh0977/223660712180?trackingCode=blog_bloghome_searchlist
▶️ [android] 안드로이드 기기 로컬 핫스팟 WIFI 와이파이 SSID 조회 및 다이렉트 AP 연결 로직 - WifiNetworkSpecifier
https://kkh0977.tistory.com/7260
https://blog.naver.com/kkh0977/223646733424?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
728x90
반응형
'투케이2K 로직정리' 카테고리의 다른 글
Comments
