Notice
Recent Posts
Recent Comments
Link
투케이2K
179. (TWOK/LOGIC) [android] 안드로이드 HTTP 폴링 조회 시 인터넷 사용 불가능한 와이파이에 연결 된 경우 상태 체크 로직 정리 본문
투케이2K 로직정리
179. (TWOK/LOGIC) [android] 안드로이드 HTTP 폴링 조회 시 인터넷 사용 불가능한 와이파이에 연결 된 경우 상태 체크 로직 정리
투케이2K 2026. 4. 9. 19:43728x90
반응형
[로직 정리]
정리 로직 : Mobile / Android
상태 : [android] 안드로이드 HTTP 폴링 조회 시 인터넷 사용 불가능한 와이파이에 연결 된 경우 상태 체크 로직 정리

[설 명]
// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------
1. 제 목 : [android] 안드로이드 HTTP 폴링 조회 시 인터넷 사용 불가능한 와이파이에 연결 된 경우 상태 체크 로직 정리
2. 테스트 환경 : Android / HTTP / 폴링
3. 사전) 👉 HTTP 폴링 조회 간략 설명 :
>> HTTP 폴링 조회는 클라이언트가 일정한 주기로 서버에 HTTP 요청을 보내서 상태나 데이터를 확인하는 방식입니다.
>> HTTP 폴링 조회는 클라이언트가 주기적으로 “변경된 거 있어?” 라고 서버에 물어보며, 주로 GET 요청 형태로 사용됩니다.
>> HTTP 폴링 조회 동작 흐름 :
--------------------------
Client Server
--------------------------
| ---- 요청 ----> |
| <--- 응답 ---- |
(잠시 대기)
| ---- 요청 ----> |
| <--- 응답 ---- |
--------------------------
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------
1. 안드로이드에서 네트워크 호출을 위한 별도 스레드 생성 및 특정 API 폴링 호출 기본 for 구문 작성
new Thread(){
@Override
public void run(){
try {
// ✅ [폴링 카운트 및 성공 , 실패 확인 변수 선언]
int pollingCount = 50; // 3 초 스레드 * 50 = 150 초 (2분 30초)
boolean errFlag = false;
String resultLog = "";
// ✅ [HTTP 호출에 필요한 URL 및 파라미터 정의]
String url = "https:// ...";
String body = "{\n" +
" \"name\":\"투케이\"\n" +
"}";
// ✅ [순차적 요청 수행]
for (int i=0; i<pollingCount; i++){
// .... 코드 계속 .....
}
// ✅ [최종 성공 및 실패 여부 판단 수행]
if (errFlag == true){ // 실패
}
else { // 성공
}
}
catch (Exception e) {
e.printStackTrace();
S_Log._E_("HTTP :: Polling :: Exception", new String[]{"Error : " + String.valueOf(e.getMessage())});
}
}
}.start();
2. 안드로이드 for 구문안에서 기본 HTTP 호출 전 방어 로직 코드 작성 수행
// ✅ [순차적 요청 수행]
for (int i=0; i<pollingCount; i++){
✔️ 네트워크 폴링 상태를 호출하고 있는 액티비티 상태 점검
if (C_App.isRunningActivity(activity) == false){
errFlag = true;
resultLog = "[Error] : activity is running false";
break; // for 문 종료
}
✔️ API 호출에 필요한 URL 및 파라미터 점검
if (C_Util.stringIsNull(url) == true || C_Util.stringIsNull(body) == true){
errFlag = true;
resultLog = "[Error] : url or body data is null";
break; // for 문 종료
}
✔️ 특정 폴링 횟수마다 정상 네트워크 사용 가능 상태 점검
if (i != 0 && i%5 == 0){ // 5 배수 인 경우 >> API 호출 전 정상 네트워크 연결 상태 체크
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
boolean networkUsed = C_StateCheck.isInternetUseStatus(activity);
if (networkUsed == false){ // 네트워크 사용 불가능 상태 (👉 ex : 인터넷 사용 불가능한 와이파이 연결 or 하드웨어 기기 SoftAP 연결 or 실제 네트워크 사용 못함)
errFlag = true;
resultLog = "[Error] : network used false";
break; // for 문 종료
}
}
}
✔️ 일정 시간 Thread 대기 코드 작성 (HTTP 연속 호출 대기 코드)
Thread.sleep(3000);
// .... 코드 계속 .....
}
3. 안드로이드 for 구문안에서 정상적으로 모든 방어 로직 통과가 된 경우 실제 HTTP 통신 호출 및 에러 발생 응답 로직 분기 처리 수행
// ✅ [순차적 요청 수행]
for (int i=0; i<pollingCount; i++){
✔️ .... 상위 방어 로직 코드 ....
▶️ HTTP 통신 호출 수행 및 응답 발생 로직 분기 처리
RequestSyncHttp.RequestSyncBodyHttp requestSyncBodyHttp = new RequestSyncHttp.RequestSyncBodyHttp(activity, "HTTP :: Start", url, body);
requestSyncBodyHttp.start();
try{
requestSyncBodyHttp.join(); // [스레드 작업 완료까지 대기]
}catch(Exception e){
S_Log._E_("HTTP :: Thread :: Exception", new String[]{"Error : " + String.valueOf(e.getMessage())});
}
// [http 통신 응답 값 확인]
Map response = requestSyncBodyHttp.getResponse();
boolean successFlag = (boolean) response.get(RequestSyncHttp.RESPONSE_FLAG); // [HTTP 성공 , 실패 플래그]
String resData = String.valueOf(response.get(RequestSyncHttp.RESPONSE_DATA)); // [HTTP 응답 데이터]
if (successFlag == true){ // 👉 [successFlag : 요청 성공]
errFlag = true;
resultLog = resData; // 응답 값 삽입
break; // ☑️ For Break
}
else { // ❌ [successFlag : 요청 실패]
// ☑️ [폴링 카운트까지는 실패해도 break 없이 지속 호출 수행]
errFlag = true;
resultLog = "[Error] : " + resData;
}
}
4. 안드로이드 for 반복문 종료 후 최종 성공 및 실패 여부 판단 수행 및 알림 팝업창 표시
// ✅ [최종 성공 및 실패 여부 판단 수행]
if (errFlag == true){ // 최종 폴링 실패
showAlert("정보 확인 중 문제가 발생했습니다. ("+resultLog+")");
}
else { // 최종 폴링 성공
showAlert("정보 확인에 성공했습니다. 새로고침 해주세요.");
}
5. ✅ 주요 참고 코드 첨부 : 인터넷 사용 가능 여부 상태 확인
// [ConnectivityManager 생성]
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
// [안드로이드 버전 분기 처리]
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
Network network = cm.getActiveNetwork();
NetworkCapabilities networkCapabilities = cm.getNetworkCapabilities(network);
// 👉 [인터넷 사용가능 하고 , 유효한 연결인지 확인 수행]
boolean hasCapabilityInternet = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
boolean hasCapabilityValidated = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
// 👉 [and 결과로 인터넷 사용 가능한 네트워크 환경 상태 체크]
boolean result = (hasCapabilityInternet && hasCapabilityValidated);
S_Log._W_("현재 연결된 네트워크 인터넷 사용 가능 상태 확인", new String[]{
"result :: " + String.valueOf(result)
});
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
▶️ [ConnectivityManager , NetworkCapabilities 사용해 현재 휴대폰 인터넷 사용 가능 상태 확인]
https://kkh0977.tistory.com/7349
https://blog.naver.com/kkh0977/223668787254?trackingCode=blog_bloghome_searchlist
▶️ [android] 안드로이드 http 통신 api 호출 폴링 수행 시 액티비티 종료 상태 체크 및 폴링 로직 종료 수행
https://kkh0977.tistory.com/7697
https://blog.naver.com/kkh0977/223759676308?trackingCode=blog_bloghome_searchlist
▶️ [업무 이슈] 안드로이드 android http 통신 api 호출 폴링 수행 시 액티비티가 종료 된 상태에서도 api 호출이 지속 되는 이슈
https://kkh0977.tistory.com/7696
https://blog.naver.com/kkh0977/223759660493?trackingCode=blog_bloghome_searchlist
▶️ [Rx] repeatWhen 사용해 http 폴링 방식 요청 수행 실시 - http polling request
https://kkh0977.tistory.com/4764
https://blog.naver.com/kkh0977/223238719346?trackingCode=blog_bloghome_searchlist
// --------------------------------------------------------------------------------------
728x90
반응형
'투케이2K 로직정리' 카테고리의 다른 글
Comments
