투케이2K

190. (TWOK/LOGIC) [android] 안드로이드 기기 등록 시 특정 와이파이 WiFi 에 기기 등록 제한 처리 로직 정리 - Runtime.getRuntime.exec 본문

투케이2K 로직정리

190. (TWOK/LOGIC) [android] 안드로이드 기기 등록 시 특정 와이파이 WiFi 에 기기 등록 제한 처리 로직 정리 - Runtime.getRuntime.exec

투케이2K 2026. 5. 17. 11:15
728x90
반응형

[로직 정리]

정리 로직 : 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
반응형
Comments