URL 유효성 체크(마켓에 유효한 앱인지 확인)


안드로이드 제작 중에 마켓에 등록되지 않은 앱을 intent를 통해 이동하게 되면

무한로딩이 걸리게 됩니다.

이런 예외처리를 어떻게 할지 생각해봤는데, URL 유효성 체크를 통해 유효한 페이지인지 확인하고

유효하지 않으면 조건문을 통해 걸러내도록 했습니다.

 

// 마켓에 앱 존재여부 확인
public static boolean checkAvailUrl(String url){
        boolean check = false;

        try{
            URL tempUrl  = new URL(url);
            HttpURLConnection connection = (HttpURLConnection)tempUrl.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();

            if(200 == connection.getResponseCode()) check = true;
        }catch(IOException e){
            return false;
        }
        return check;
}

위 코드를 사용하면 마켓에 존재하지 않는 앱은 false를 리턴받아 처리할 수 있게 됩니다.

네트워크에 접속하게 되는데 바로 접속하게 되면 android.os.NetworkOnMainThreadException 에러가 발생합니다.

이를 해결하기 위해서는 Thread를 이용하시면 됩니다.

 

Thread workingThread = new Thread(() -> {
	isAppStoreAvail = checkAvailUrl(
	"https://play.google.com/store/apps/details?id=패키지명");
});
        
workingThread.start();

try {
	workingThread.join();
} catch (InterruptedException e) {
	e.printStackTrace();
}

if (isAppStoreAvail) {
	// 구글플레이에 해당 앱이 있을 경우
}

이런식으로 Thread에 넣어서 정상적으로 작동이 됩니다.

그냥 new Thread(() -> { }).start(); 를 사용해도 되지만 그럴 경우 Thread가 끝나기 전에 이미 다른 코드가 실행되기 때문에 Thread가 다 끝나고 다음코드가 진행될 수 있도록 join()을 사용해주시면 됩니다.


+ Recent posts